2009-01-12 22 views
25

Deseo enviar correos electrónicos a un administrador cuando la aplicación falla. por lo que simplemente hacer esto en global.asax:manejo Application_Error en ASP.NET global.asax de la aplicación ASP.NET

void Application_error(object sender, EventArgs e) 
{ 
    SendMessageToAdministarator(Server.GetLastError().ToString()); 
} 

pero en realidad muchas veces se llama Application_Error a pesar de que la aplicación no se bloqueará.

Y deseo enviar el correo a la administración SOLAMENTE cuando la aplicación se colgó.

Además, ¿tengo una forma sencilla de volver a cargar la aplicación?

Estoy buscando la solución más simple.

Respuesta

52

¿Qué tipo de errores se envían cuando la aplicación no se cuelga? Se puede comprobar el tipo de excepción y no enviar mensajes de correo electrónico en las excepciones que no deje que la aplicación (por ejemplo, una redirección puede tirar la ThreadAbortException la que puedo filtrar manualmente en el código):

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    if (ex is ThreadAbortException) 
     return; 
    Logger.Error(LoggerType.Global, ex, "Exception"); 
    Response.Redirect("unexpectederror.htm"); 
} 

Se podría añadir un redireccionamiento a una página de error con un mensaje para el usuario de que se ha producido un error y algunos enlaces a páginas relevantes en el sitio. Esto es para 'levantar la aplicación de nuevo' - Espero que esto sea lo que querías.

También puede buscar en el registro con log4net que también puede registrar errores en el servidor y enviar correos electrónicos sobre errores.

+0

Muchas gracias. ¿Qué quiere decir con "filtro de forma manual en el código"? Además, un error que constantemente recibo es System.Web.HttpException: el archivo no existe. en System.Web.StaticFileHandler.ProcessRequestInternal (contexto HttpContext) ... pero eso no causa ningún daño notable – Hanan

+0

Actualicé la respuesta con un ejemplo de código. Puede reemplazar ThreadAbortException con HttpException. O agregue varias comprobaciones allí para obtener más tipos de excepciones. – rslite

Cuestiones relacionadas