2010-09-15 18 views
17

Parece que mi global.asax no está disparando. Tengo:global.asax Application_Error no enciende

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

En mi web.config, no tengo nada como CustomErrors. Como quiero que todo sea manejado por Global.asax y transferido a ExceptionFormView.aspx.

Funciona bien a nivel local, pero no cuando lo implementamos en los servidores. ¿Alguna idea?

¿Necesito PrecompiledApp.config?

Respuesta

19

Si usted no tiene una sección en su customErrors Web.config, es lo mismo que tener la sección con mode="RemoteOnly". Este modo CustomError hará que las solicitudes locales (realizadas desde el servidor que ejecuta IIS) no usen errores personalizados y ejecutará el método Application_Error() como se esperaba. Las solicitudes remotas usarán customErrors y no ejecutarán el método mencionado anteriormente.

Esto explica por qué está viendo un comportamiento diferente localmente que en su servidor. Puede reproducir este comportamiento en cualquier entorno cambiando el modo CustomErrors a Activado o Desactivado explícitamente. Activado no ejecutará la sección Application_Error() mientras esté desactivado.

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

Esto no resuelve su problema, por supuesto, que desea que el método se ejecute independientemente. Tengo una recompensa en another question donde estamos tratando de averiguar por qué el método Application_Error() no se activa cuando el modo customErrors está activado. Vuelve allí en un par de días para ver si hemos encontrado una solución.

4

Si está utilizando IIS 7, intenta establecer:

Response.TrySkipIisCustomErrors = true; 
+0

Referencia: https://github.com/13daysaweek/Mvc4CustomErrorPage y http://blog.janjonas.net/2011-04-13/asp_net-prevent-iis_75_overriding-custom-error-page-iis-default- error-page – lahphim

+0

Perfecto, gracias :) – mt025

3

Si previamente ha desplegado su aplicación como precompiled pero ahora no lo es, entonces sí, es necesario eliminar PreCompiledApp.config y su Deployment.dll en el directorio bin .NET usará el código global en Deployment.dll en lugar de sus cambios.

+0

¡Esto funcionó para mí! He estado dando vueltas en círculos durante las últimas 6 horas, solo para señalar que esto se debió a una precompilación. –

+0

Mi problema es todo lo contrario. Anteriormente, mi aplicación no estaba precompilada, pero ahora está precompilada. Comprobé que PrecompiledApp.config está en mi directorio raíz de mi sitio web, pero mi Application_Start() aún no se está activando. –

Cuestiones relacionadas