Поиск ошибок классического ASP на настраиваемой странице ошибки 404 в IIS7

Мы переносим некоторые классические сайты ASP с сервера IIS6 на новый сервер Server 2008, работающий под управлением IIS7.

Мы прошли процесс обучения в отношении пользовательских ошибок, и теперь они работают правильно, а Server.GetLastError теперь работает.

Сайты, которые мы переносим, ​​используют специальную CMS, которая использует настраиваемую страницу ошибок 404.asp для извлечения контента из базы данных в зависимости от URL-адреса. Это тоже отлично работает.

Однако, когда эти 2 объединены (например, у нас есть ошибка 500 на странице, которая работает через настраиваемую страницу 404), мы получаем полностью пустую страницу. Ни ошибки, ни информации ничего. Обычная белая страница.

Пример 1: http://snavebelac.com/thisdoesnotexist приводит к созданию настраиваемой страницы 404 Пример 2: http://snavebelac.com/st-test пустая страница. Это намеренная ошибка 500 на настраиваемой странице 404.

Я предполагаю, что из-за того, что он проходит через настраиваемую страницу ошибок 404.asp, это каким-то образом блокирует работу настраиваемой страницы ошибок 500.

Кто-нибудь знает, как я могу настроить сервер так, чтобы пользовательская страница 404 запускалась, но 500 ошибок выводились в браузер, как они были в IIS6, ИЛИ есть ли способ настроить сервер для обработки пользовательского 404, а также обычай 500?

Заранее спасибо.


person Snavebelac    schedule 12.03.2012    source источник
comment
Не должно быть проблем с настраиваемыми 404 и индивидуальными 500, как в классическом asp, можете ли вы опубликовать соответствующую часть своего web.config?   -  person Richard Benson    schedule 13.03.2012
comment
Интересная проблема Я сам пробовал на IIS7.5 и получаю те же результаты.   -  person AnthonyWJones    schedule 13.03.2012
comment
Приносим извинения за то, что не ответили на это раньше. Мы не смогли найти другого решения, кроме добавления сообщения об ошибке рядом с верхней частью страницы 404 и последующей проверки номера ошибки в конце. Это делает отладку очень сложной, так как информации об ошибках не хватает!   -  person Snavebelac    schedule 28.03.2012


Ответы (3)


Вам необходимо настроить свой web.config для обработки 500 ошибок статуса, например:

<system.web>
    <customErrors mode="On" defaultRedirect="frmError.aspx">
        <error statusCode="404" redirect="frmNotFound.aspx" />
        <error statusCode="500" redirect="frmError.aspx" />
    </customErrors>
</system.web>

Обратите внимание на четвертую строку кода, где вы говорите, что страница ведьмы должна быть вызвана, так как вы получили ошибку 500.

person Tiago César Oliveira    schedule 14.03.2012
comment
Спасибо за ответ. Вот как мы его настроили в настоящее время (за исключением того, что он использует классический ASP, а не .net). - person Snavebelac; 28.03.2012

Ознакомьтесь с опубликованным здесь решением - Как могу ли я правильно обработать 404 в ASP.NET MVC?

Ключ - Response.TrySkipIisCustomErrors = true;

person swax    schedule 28.11.2012

У меня была аналогичная проблема, решение действительно странное, но точно работает.

Я буду очень прагматичен, сделаю следующее.

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Auto">
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/500.100.asp" responseMode="ExecuteURL" />
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="/404.asp" responseMode="ExecuteURL" />
</httpErrors>

Пустая страница будет «не пустой», если вы убедитесь, что она заканчивается:

Response.Flush()

Когда IIS выполняет код внутри /500.100.asp, он не сбрасывает ответ и заканчивается пустой страницей. Уверяю, что пользовательские ошибки «404» и «500.100» возможны в IIS7.5 / IIS8 и Classic ASP;)

person Vincenzo    schedule 15.11.2014