Global.asax Application_Error не работает

Мой global.asax, похоже, не стреляет. У меня есть:

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
    Server.Transfer("~/ExceptionFormView.aspx");
}

В моем web.config у меня нет ничего подобного CustomErrors. Поскольку я хочу, чтобы все обрабатывалось Global.asax и передавалось в ExceptionFormView.aspx.

Он работает нормально локально, но не при развертывании на серверах. Любые мысли?

Мне нужен PrecompiledApp.config?

Ответ 1

Если у вас нет раздела customErrors в вашем Web.config, это то же самое, что и раздел с mode="RemoteOnly". Этот режим customError заставит локальные запросы (сделанные с сервера, на котором запущен IIS) не использовать пользовательские ошибки, и он выполнит метод Application_Error(), как и ожидалось. Удаленные запросы будут использовать customErrors и не выполнять упомянутый выше метод.

Это объясняет, почему вы видите другое поведение локально, чем на своем сервере. Вы можете воспроизвести это поведение в любой среде, явно изменив режим customErrors на On или Off. Вкл. Не будет выполнять раздел Application_Error(), когда выкл. Будет.

<customErrors mode="On|Off|RemoteOnly" />

Это не решает вашу проблему, конечно, что вы хотите, чтобы метод выполнялся независимо. У меня есть щедрость на другом вопросе, где мы пытаемся выяснить, почему метод Application_Error() не срабатывает, когда режим customErrors включен. Проверьте это через пару дней, чтобы узнать, нашли ли мы решение.

Ответ 2

Если вы используете IIS 7, попробуйте установить:

Response.TrySkipIisCustomErrors = true;

Ответ 3

Если вы ранее развертывали ваше приложение как предварительно скомпилированное, но теперь вы этого не сделали, то да, вам нужно удалить PrecompiledApp.config и вашу Deployment.dll в каталоге bin..NET будет использовать глобальный код в Deployment.dll вместо ваших изменений.