У нас есть два веб-сервера под управлением IIS 8.5 на Windows Server 2012 R2. Два сервера расположены за балансировщиком нагрузки.
На веб-серверах запущено приложение ASP.NET MVC, которое, помимо прочего, позволяет пользователям получать доступ к файлам PDF. Эти файлы PDF расположены на третьем сервере, файловом сервере, и доступны для обоих веб-серверов через виртуальные каталоги. В каждом виртуальном каталоге есть несколько подкаталогов.
В настоящее время у нас возникают серьезные проблемы с доступом к файлам PDF. Доступ продолжает работать в течение многих дней, а затем внезапно что-то ломается, и мы получаем ошибку 500.19 всякий раз, когда кто-то пытается получить доступ к файлу pdf.
Обычно это происходит только на одном веб-сервере за раз и совершенно случайно. Когда возникают проблемы, единственное, что помогает, - это переработать пул приложений. До тех пор файлы PDF недоступны.
Еще один интересный факт заключается в том, что всякий раз, когда прерывается доступ, он прерывается только для определенных подкаталогов, в то время как другие все еще работают. Однако не всегда тот же подкаталог перестает работать, здесь тоже случайным образом.
Я посмотрел журнал и вот что получил:
2014-03-05 08:03:44 W3SVC2 [SERVER_NAME] [SERVER_IP] GET [PATH_TO_PDF] - 80 - [LOADBALANCER_IP] [USER_AGENT] [COOKIE] - 500 19 6 0 [ORIGINAL_CLIENT_IP]
Я также попытался активировать трассировку неудачных запросов, но на самом деле это не дает больше информации, чем журнал IIS.
Есть ли способ узнать, почему случайным образом прерывается доступ к файлам pdf (которые физически существуют, кстати - доступ со второго веб-сервера, когда первый выходит из строя)?
Ответ был найден благодаря Сэму Гулду, который связался со мной напрямую по электронной почте.
- Щелкните Редактор конфигурации на уровне сервера / компьютера.
- Выберите в раскрывающемся списке и разверните System.applicationHost
- выберите настройку сайтов
- Нажмите кнопку… в разделе "Коллекции".
- Выберите соответствующий веб-сайт и установите для параметра allowSubDirConfig значение False.
- Выполните сброс IIS
В качестве альтернативы мы также можем попробовать запустить команду appcmd:
C: \ Windows \ System32 \ inetsrv> appcmd.exe установить config -section: system.applicationHost / sites /[name='My_Website']]