2009-06-06 15 views
21

¿Alguien puede explicar por qué el constructor de una clase personalizada derivada de HttpApplication se invoca varias veces al iniciar la aplicación?¿Por qué se llama varias veces al constructor HttpApplication?

Mi estructura del código es el siguiente:
- Mi Global clase en global.asax deriva de CustomApp clase.
- El clase CustomApp deriva de HttpApplication clase

Se crea la clase Globalen el inicio, pero cuando coloco un punto de interrupción en el constructor, que es invocado varias veces! Pensé que debería haber una sola instancia de Aplicación clase creada?

¿Estoy equivocado?

UPD: el servidor web de hecho puede crear varios HttpApplication casos para procesar múltiples peticiones que llegan al mismo tiempo. Esto se hace especialmente evidente cuando coloca un punto de interrupción en el constructor de su HttpApplication descendiente. Varias solicitudes estarán pendientes del cliente (contenido http, archivos CSS, etc.) y para atender a cada una de ellas, el servidor web creará nuevas instancias de HttpApp. Por lo tanto, tenga cuidado con esto cuando escriba la lógica de inicialización de la aplicación.

+0

¿es posible publicar un fragmento de código de reducción que muestre este comportamiento? –

Respuesta

15

Creo que el tiempo de ejecución de ASP.NET puede crear más de una aplicación Http por dominio de aplicación. Entonces HttpApplication.Init y el Ctor pueden ser llamados más de una vez.

Si desea tener un código de inicialización que solo se ejecuta una vez, debe usar el evento Application_Start, que solo se llamará una vez por aplicación.

+0

¿Hay algún evento (o similar) al que me pueda conectar en Applcation_Start ya que necesito tener mi clase HttpApplication fuera del sitio web? –

+1

Simplemente implemente un método 'Applcation_Start' en Global.asax.cs y se conectará automáticamente y se llamará a la hora de inicio. http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

Tenga en cuenta, sin embargo, que eventos como 'AuthenticateRequest' o' AcquireRequestState' no se activan si registra los controladores de eventos en 'Application_Start () '. Es posible que desee registrarlos en 'Init()' que reemplaza a 'HttpApplication'. – Manfred

6

Por favor, eche un vistazo a una publicación global.asax in ASP.NET - explica por qué hay múltiples instancias de HttpApplication. Básicamente hay dos piscinas: especial y normal. El grupo normal contiene instancias de HttpApplication que son utilizadas por las solicitudes (cada solicitud tiene su propia instancia de HttpApplication). El grupo especial contiene objetos HttpApplication utilizados para eventos de nivel de aplicación (como Application_Start, Application_Error).

+0

muy interesante, gracias! – Andy

Cuestiones relacionadas