Ошибки, не обнаруженные Global.asax?

В моем проекте есть страница с ошибкой под названием oops.aspx. У нас есть следующий код в global.asax:

protected void Application_Error(object sender, EventArgs e)
{
    Server.Transfer("~/oops.aspx", true);
}

oops.aspx может извлечь ошибку, сгенерировать красивое электронное письмо на сервер и предоставить пользователю сообщение об ошибке.

Использование Server.Transfer сохраняет URL-адрес, информацию о форме и другую полезную информацию об устранении неполадок. В какой-то момент в oops.aspx при составлении электронного письма я беру Request.RawUrl и включаю его в электронное письмо. Это URL-адрес (с параметрами строки запроса) страницы, вызвавшей ошибку.

У нас также есть это в web.config:

<customErrors mode="On" defaultRedirect="oops.aspx"></customErrors>

Когда система перенаправляет из-за ошибки, основанной на этом, она перенаправляет на /oops.aspx?aspxerrorpath=/Clients/EditClient.aspx (иногда с /, иногда с разделителями путей %2f). Информация о строке запроса и исключении теряется, поэтому электронная почта и сообщения, сгенерированные oops.aspx, немногочисленны и мало что говорят о том, что происходит.

В последнее время я получаю много ошибок второго рода. Ошибки возникают небольшими пачками, несколько за несколько минут, а потом ничего в течение нескольких часов. Они случаются по всему сайту (в том числе на WebResource.axd и т.п.), что наводит меня на мысль, что это не конкретная ошибка на нашем сайте, а что-то на более низком уровне, например, проблема с сессионным сервером или что-то в этом роде.

Итак, со всем этим, мой актуальный вопрос:

У меня возникают ошибки на сайте, которые происходят таким образом, что их не отлавливает global.asax. Что может вызывать такие ошибки и как их устранить?


person Aric TenEyck    schedule 14.03.2012    source источник


Ответы (1)


Поскольку вы включили пользовательские ошибки в своем web.config, исключение будет перехвачено до того, как Application_Error выполнится и перенаправит вас на oops.aspx. Если вы не хотите, чтобы это произошло, не включайте пользовательские ошибки в файле web.config. Таким образом, все ошибки будут проходить через Application_Error, если вы настроили IIS для запуска пула приложений в режиме интегрированного конвейера.

person Darin Dimitrov    schedule 14.03.2012
comment
Дарин, какая связь с Application_Error и пулом приложений, находящимся в режиме интегрированного конвейера? - person VoodooChild; 14.03.2012
comment
@VoodooChild, если вы работаете в классическом режиме в IIS 6.0, когда кто-то пытается получить доступ, например, к /myapp/foo.jpg, Application_Error никогда не сработает. ASP.NET даже не будет уведомлен об этом запросе. IIS будет напрямую обслуживать изображение. В режиме интегрированного конвейера все запросы проходят через управляемый обработчик. - person Darin Dimitrov; 14.03.2012