Application Error Global asax : Javier Luna blog

Monday, November 03, 2008

Application Error Global asax

Un mecanismo para gestionar los errores por el lado del servidor en las aplicaciones web ASP.NET, es a traves del:

Application_Error( Object sender, EventArgs e )

Alli dentro debes implementar el codigo que permita capturar la excepcion NO controlada que se produjo dentro de tu aplicativo ASP.NET.

HttpContext.Current.Server.GetLastError().GetBaseException();

Esta linea de codigo, te permitira obtener la excepcion de menor nivel, la que realmente origino la excepcion.

Es una forma de obtener el InnerException por cada una de las excepciones que fueron desencadenadas.

¿Para que usar HttpContext.Current? ¿NO bastaria con utilizar this.Server.GetLastError()?

Pues la respuesta es contundente, un reverendo NO.

En un entorno de desarrollo, en tu PC local donde tu eres amo, dueño y señor de tu develop machine, pues probablemente NO se manifiesten ciertas excepciones, que en un entorno de produccion, con mucha seguridad si se manifiesten, es por ello que es necesario una gestion de errores para tu aplicativo ASP.NET

Pero ademas, debido al mecanismo con el que funciona ASP.NET y el ciclo de manejo propio de este, en un entorno de produccion el this.Server.GetLastError() en ocasiones puede retornar un valor NULL, a pesar que se haya generado la excepcion por el lado del servidor.

HttpContext.Current.Server.GetLastError() si devuelve la informacion solicitada, es decir, la excepcion desencadenada.

Luego de capturar el Exception, puedes hacer lo que quieras con el, enviarlo por email al equipo de soporte a traves del SmtpClient del System.Net.Mail, o guardar el contenido de la excepcion en un archivo de texto a modo de log, o utlizar el EventLog del System.Diagnostics para preservar la excepcion el Visor de Eventos de las Herramientas Administrativas de tu servidor web.

En fin, muchas formas, para todos los gustos y de todos los colores.

No comments: