2008-11-13 32 views
37

¿Alguien puede decirme cuándo Application_End se activa en un ciclo de vida de una aplicación? Cuando todas las sesiones hayan finalizado, ¿Application_End se activará automáticamente? + ¿Hay alguna otra razón por la cual Application_End podría activarse?Application_End global.asax

+1

Eliminé mi respuesta de que Application_End solo se dispara cuando apaga el sitio web. Sin embargo, unos pocos minutos de investigación arrojaron información contradictoria sobre este tema y no quiero que me voten a la baja por una respuesta incorrecta. – Cybis

+0

No es una respuesta a su pregunta, pero también es útil para investigar si este evento está sucediendo y no está seguro de por qué: http://blogs.msdn.com/b/tess/archive/2006/08/02/asp -net-case-study-lost-session-variables-and-appdomain-recycles.aspx – Tao

Respuesta

36

El evento application_end se dispara principalmente cuando se recicla el grupo IIS o la aplicación se descarga. Otra cosa a tener en cuenta es que un cambio en un archivo dependiente (por ejemplo, web.config) hará que la aplicación se vuelva a cargar a sí misma, lo que hará que el evento application_end se dispare mientras se cierra solo.

Para tener en cuenta, la única instancia que encontré del final del evento de la aplicación que se activa cuando la última sesión de usuario expira está en alguna documentación antigua con fecha de 2001. No estoy seguro si ese criterio todavía se aplica.

+2

Me di cuenta cuando se modifica el web.config, pueden transcurrir algunos minutos antes de que se active el application_end. –

+0

Para el punto de @ anphu, cuando la aplicación se recarga debido a un cambio de configuración (o cambio de DLL), a menudo hay un período de tiempo en el que la instancia anterior de la aplicación y la nueva instancia se ejecutan una al lado de la otra , ya que la instancia anterior termina de manejar sus solicitudes existentes; esto está muy bien explicado en http://odetocode.com/articles/305.aspx - buena lectura para este tema – Tao

+0

¿Se llamará a la finalización de la aplicación si desinstalo la aplicación web desde el símbolo del sistema que se instaló utilizando el paquete msi? – YakRangi

11

Application_End se activa cuando finaliza el proceso de trabajo de ASP.NET. Esto generalmente ocurre después de un período configurable de inactividad o cuando IIS (o el grupo de aplicaciones relevante) se cierra o se reinicia.

Cuando se ejecuta en IIS 6.0, el tiempo de espera de inactividad se puede configurar a través de la configuración del grupo de aplicaciones en el Administrador de servicios de Internet (Tiempo de inactividad en la pestaña Rendimiento). En versiones anteriores de IIS, se puede establecer en machine.config (idleTimeout en processModel).

+2

¿Sabe si hay una instancia en la que el proceso podría finalizar sin ejecutar Application_End? Por ejemplo, he asignado un recurso compartido de red en Application_Start, y quiero desconectar ese recurso compartido en Application_End. ¿Habrá un momento en el que la aplicación podría finalizar sin activar Application_End? Me imagino que un corte de energía satisfaría este criterio. ¿Qué pasa con un error de aplicación fatal de algún tipo? – crush

+2

@crush: sí, absolutamente, cada vez que el proceso finaliza "inesperadamente", el evento no se activará; Los ejemplos incluyen interrupción de energía/falla de hardware, cualquier situación donde un hilo en el proceso se "cuelga" y termina el grupo de aplicaciones (por ejemplo, IISReset si la solicitud más larga tarda más de 30 segundos en completarse), cualquier caso donde alguien o algo lo haga manualmente. Procese "en ese proceso w3wp.exe (por ejemplo, en el Administrador de tareas), cualquier" Cierre forzado "y cualquier situación donde el código no administrado cause memoria u otros errores de nivel de proceso (desbordamiento de pila, GPF, etc.) – Tao

Cuestiones relacionadas