JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo depurar el evento Application_End en ASP.NET

El evento Application_End se desata en una aplicación Web cuando ésta termina por cualquier motivo, aunque sea para reiniciarse. Escribimos un gestor de este evento dentro de Global.asax en el que incluimos cualquier tipo de código que se encargará de dejar en el estado correcto cualquier recurso global que hayamos inicializado en el evento complementario que se lanza cuando arranca la aplicación: Application_Start.

Esto es válido tanto para aplicaciones Web Forms como MVC.

PushToResetEl código que pongamos en estos eventos se lanzará únicamente cuando se arranque y se detenga la aplicación. Si queremos depurarlo desde Visual Studio, usando el servidor de desarrollo (que es lo habitual), la cosa tiene algo de truco.

El problema es que no es tan fácil conseguir que se cierre la aplicación y que puedas depurarlo al mismo tiempo.

Al contrario de lo que muchos programadores se piensan, cerrar el navegador no detiene la aplicación, que sigue activa por detrás, sólo cierras la sesión actual del usuario pero nada más, por lo que el evento Application_End no saltará.

También puedes pensar que si paras el servidor (que es el de desarrollo, Cassini), sería suficiente. Pero como el depurador de Visual Studio está adjuntado al proceso de ese servidor, se pierde el proceso justo antes de cerrarlo y por lo tanto no puedes depurar tampoco (eso no significa que no salte, sino que Visual Studio no tiene forma de enterarse).

Una forma de poder depurar el evento es utilizar un Internet Information Server real en lugar del servidor de desarrollo para hacer la depuración. Si usas IIS puedes detener (o mejor, reciclar) el grupo de aplicaciones de tu aplicación para forzar su detención y que se pare la aplicación (ojo, no llega con parar la aplicación Web). De todos modos esto es engorroso y tienes que andar configurando tanto IIS como Visual Studio para poder hacerlo.

La solución es mucho más fácil de conseguir y consiste en provocar alguna de las cosas que hacen que una aplicación se reinicie, que son bastantes: cambiar los contenidos de la carpeta "bin" si es una aplicación Web, cambiar los contenidos de web.config, renombrar o eliminar una subcarpeta de la aplicación (sí, esto también), etc...

Así que una forma sencilla y rápida de provocar que salte Application_End (y luego Application_Start) y poder depurarlos en Visual Studio con el servidor normal de desarrollo es la siguiente:

  1. Lanza tu aplicación pulsando F5
  2. Abre el explorador de archivos de Windows y vete hasta la carpeta física en donde está tu aplicación guardada.
  3. Abre el archivo web.config con el bloc de notas y simplemente vete a Archivo·Guardar, para que lo escriba de nuevo (sin ni siquiera cambiarlo)
  4. Voilà! De repente se recicla la aplicación y te salta el evento en el depurador

 

¡Espero que te sea útil!

photo credit: voodooangel - cc

José Manuel Alarcón José Manuel Alarcón
Fundador y director de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Agregar comentario