Почему пустые страницы обрабатываются с "200 OK" для ошибок asp.net в IIS 8.5 (Win 2012 R2)?

Я установил новый сервер Windows 2012 R2 под управлением IIS 8.5.

Мы заметили, что когда возникает ошибка (например, служба состояний ASP.NET не работает), вместо вывода экрана ошибки с кодом состояния 500 запрос фактически возвращает полностью пустую страницу (только заголовки - без содержимого). Очевидно, что нам нужно увидеть ошибки, и подача 200 OK за ошибку может быть очень проблематичной для индексаторов, таких как Google и т. Д., Или для любых других инструментов мониторинга (которые не сообщат нам, что сайт перешел в автономный режим).

На других наших серверах (IIS 7) мы видим "желтый экран ошибки" с сообщением типа "не удалось подключиться к серверу состояний" (или аналогичным).

Что здесь может быть не так? Есть ли какая-то настройка, чтобы глобально отключать все ошибки (но это было бы глупо, если бы он также обслуживал код состояния 200) или что-то еще мешало?

Единственное, что может помешать, это то, что на сервере установлен ISAPI_Rewrite (но обычно это не вызывает этой проблемы).

Спасибо!

7 ответов

Решение

Была похожая проблема на Windows 8.

В настройках найдите "Включить или отключить функции Windows".

Убедитесь, что следующие функции включены

"/ Информационные службы Интернета / Службы всемирной паутины / Общие функции HTTP / Ошибки HTTP ". "/ Информационные службы Интернета / Службы всемирной паутины / Общие функции HTTP / Статическое содержимое ".

Необходимо убедиться, что в модуле ASP не включена отладка на стороне сервера.

Классические ошибки ASP сервера 500 возвращаются как 200. Предпринята попытка открыть приложение отладки на стороне сервера, которое затем не может быть найдено, и IIS впоследствии возвращает ответ 200 и пустую страницу.

Убедитесь, что вы не вызываете Server.ClearError() в Application_Error файла Global.asax.cs, который оказался моей проблемой.

Извлечение всего кода Global.asax помогло мне найти причину ошибки.

После этого IIS начал возвращать страницу с ошибкой, как и ожидалось. Затем, после исправления, я вернул код Global.asax обратно.

Может быть, этот случай поможет вам.

У меня была похожая проблема при запросе Default.aspx (установить как страницу по умолчанию в каталоге). Сервер вернул статус 200, но Содержимое было пустым.

В этом случае он работал для переключения режима управляемого конвейера пула приложений с интегрированного на классический.

Убедитесь, что вы активировали активацию HTTP

Я столкнулся с теми же симптомами, но в моем случае это связано с тем, что уровень доверия .NET имеет более низкий уровень, чем требуется приложению.
В диспетчере IIS > Подключения > Ваш сервер > Уровни доверия .NET изменение уровня доверия на Полный решило проблему.

Другие вопросы по тегам