У меня возникла проблема, и мне не удалось найти никаких сообщений или документации, которые уже касаются этой конкретной проблемы.
Настройка:
Эта проблема связана с широко посещаемым веб-сайтом, написанным на .NET 3.5 и работающим на IIS7. Приложение использует поисковый индекс Lucene по пути UNC, заданному в файле Web.config приложения. Этот UNC-путь одинаков на всех 16 веб-серверах, и все они обращаются к одному и тому же индексу в одном месте. Приложение работает в классическом режиме (по сравнению с интегрированным) и использует удостоверение и олицетворение. У учетной записи достаточно разрешений. Все веб-серверы в настоящее время являются серверами Windows 2008, а общий файловый ресурс также является сервером Windows 2008 с SQL Server 2008. Серверы всегда находятся в конфигурации рабочей станции, а не в домене и без AD. У всех серверов есть одна основная учетная запись пользователя, настроенная одинаково с одинаковыми разрешениями и паролем.
История:
Эта установка годами работала нормально при нескольких конфигурациях. Недавно с веб-серверами под управлением Windows 2003 и IIS6, обращающимися к этому удаленному файловому ресурсу UNC на сервере Windows 2003 под управлением SQL Server 2005. И совсем недавно с веб-серверами под управлением Windows 2008 и IIS7, обращающимися к этому удаленному файловому ресурсу UNC в той же Windows 2003 с SQL как только что упоминалось. Проблема возникает только сейчас, после перемещения этого общего ресурса UNC на этот новый сервер Windows 2008 с SQL.
Эта проблема:
В настоящее время сайт работает нормально, и каждый веб-сервер имеет доступ к индексу и успешно использует индекс должным образом. Однако периодически (от 1 до 15 минут в зависимости от активности и синхронизированного обслуживания) файл «сегментов» Lucene удаляется и заменяется (он изменяется). Текущий файл, например "segment_xyz" заменяется на "segment_zyx". Не каждый раз это происходит, но в большинстве случаев приложение ищет предыдущий файл, а не текущий. Это приводит к исключению FileNotFoundException, и сообщается об ошибке .NET: System.IO.FileNotFoundException: не удалось найти файл '\ X.X.X.X \ Index \ 20101201 \ guid-x-x-x-x \ segment_zyx'. Это длится от 1 до 3 секунд и происходит на всех серверах. Это воспроизводимо, так как я могу получить доступ к сайту непосредственно на одном сервере, следить за изменением файла, и когда это произойдет, я могу обновить страницу и получить сообщение об ошибке в течение 1–3 секунд.
Некоторые моменты и теории:
Я подозревал, что это проблема с разрешениями, хотя это маловероятно. Я исчерпал возможности конфигурации разрешений. Я зашел так далеко, что настроил общий доступ к файлам с полным общедоступным доступом с использованием группы учетных записей «Все», а учетная запись удостоверения получила полные права администратора, будучи включенной в группу администраторов. Среди прочего, я настроил параметры аутентификации ASP.NET олицетворения.
Подозревая какое-то кеширование файлового ресурса UNC, я просмотрел настройки теневого копирования (VSS) на исходном сервере общего доступа, и я посмотрел на каждый веб-сервер, чтобы убедиться, что нет предыдущих версий и т. Д. Это также кажется маловероятным причиной для меня.
Запуск приложения в интегрированном режиме невозможен
Эта проблема возникает на каждом из наших 16 веб-серверов, и, похоже, все (или большинство) страдают одновременно из-за одних и тех же итераций изменения файла.
Чтобы быть предельно ясным, эта проблема проявилась только тогда, когда я переместил общий ресурс с нашего сервера Windows 2003 с SQL на наш сервер Windows 2008 с SQL. Конфигурации максимально идентичны, и в конфигурации нет ничего особенного, это простой стандартный файловый ресурс с настроенными общими разрешениями.
Я выполнил необходимые перезагрузки, перенастройки, сбросы сервисов и т. Д.
Я попытался изменить конфигурацию пути UNC на конфигурацию подключенного диска, но в настоящее время есть проблемы с приложением, которые не позволяют использовать этот параметр. Я не знаю, решит ли это текущую проблему, и я бы предпочел не реализовывать это как решение.
Эта проблема вызывает 1000 ошибок в день. Надеюсь, у кого-то есть идеи? Буду бесконечно благодарен за любую помощь в этом вопросе!
Обновление: я нашел свое решение: http://technet.microsoft.com/en-us/library/ff686200(WS.10).aspx
Значение DirectoryCacheLifetime, равное нулю, решило проблему.