2011-07-14 8 views
8

Estaba leyendo este post "When is IHttpModule.Dispose method called?" encontré estepregunta respecto IHttpModule.Dispose y Application_End

"El método Dispose realiza cualquier trabajo de limpieza final antes de la extracción del módulo de la tubería de ejecución."

lo que significa que es para toda la aplicación.

Está bien. De todos modos, intenté por mi cuenta que descubrí que al utilizar el método de eliminación de IHttpModule y un controlador de eventos para la aplicación , el evento sugerido debería ser apenas el mismo. El primero ocurre justo después del segundo.

No creo que esto sea 100% correcto, es decir que IHttpModule.Dispositivo no siempre es seguido por Application_End. Supongamos que tengo varias instancias de objetos de aplicación que se ejecutan para mi aplicación, lo que significa que cada instancia del objeto Aplicación tendrá instancias individuales de módulos dentro de ella. Ahora supongamos que llega un momento en que el grupo de aplicaciones se llena con instancias de aplicaciones, ¿qué pasará entonces? ¿No será comenzar a eliminar las instancias de la aplicación una por una y en la cadena se eliminarán los módulos dentro de la instancia de la aplicación? Ahora, esta eliminación del módulo no significa que Application_End va a dispararse después de eso. La aplicación aún se está ejecutando. ¿Estoy en lo cierto?

Respuesta

8

Sí.

HttpModules están por HttpApplication. Al contrario de lo que sugiere su nombre, el método Application_End en global.asax NO se activa al final de la vigencia de cada HttpApplicaton. Se activa al final de TODAS las vidas útiles de HttpApplications en el dominio de aplicación actual (cuando el dominio de la aplicación se derriba). Lo mismo es cierto para el método Application_Start.

+0

gracias por su respuesta! Una cosa más ... ¿es correcto que cuando el grupo de aplicaciones está lleno de instancias de objetos de aplicación, comenzará a limpiarlos? o el grupo de aplicaciones se reiniciará? –

+1

Depende de cómo se siente IIS el día de la consulta. :) .... Si el proceso de trabajo alcanza una condición de reciclaje (según lo determinado por las propiedades del grupo de aplicaciones en la configuración de IIS), entonces se reiniciará todo el proceso y se generará un nuevo w3wp. Sin embargo, es más probable durante el uso normal (porque reiniciar todo el grupo de aplicaciones es caro), el grupo de aplicaciones creará y eliminará las instancias de HttpApplication. Tal como está configurado, IIS también puede hospedar varios AppDomains en un único proceso de trabajo del grupo de aplicaciones y también puede crear un jardín web de múltiples procesos de proceso que se ejecutan al mismo tiempo para un grupo de aplicaciones. – Jeff

+0

¿Por qué alguien menospreció esta respuesta? – Jeff

0

Solo hay 1 instancia del objeto de aplicación por aplicación. hay muchos objetos de sesión, cada uno tratando con solicitudes o esperando ser reciclados.

El grupo de aplicaciones no se llenará de objetos de la aplicación ya que solo hay 1 por aplicación. Cuando un grupo de aplicaciones aloja más de 1 aplicación, habrá muchas y reciclar el grupo las matará. Los grupos de aplicaciones también tienen un control de estado que reiniciará el proceso después de una cierta cantidad de solicitudes/uso de memoria. en ese caso, las sesiones existentes se dejan morir mientras se inicia una nueva aplicación para manejar nuevas solicitudes. cuando todas las sesiones en la aplicación anterior están agotadas, esa aplicación se derriba.

Ver MSDN para más detalles.

Cuestiones relacionadas