2011-05-10 12 views
19

Al usar el método WebActivator PreApplicationStart, ¿qué es lo que realmente desencadena los métodos vinculados a esto para ejecutarse? ¿Cuándo IIS7 ha iniciado el Pool de aplicaciones? ¿Cuándo se realiza la primera solicitud al servidor web? ¿Algo más? Si tiene la respuesta, ¿podría también proporcionar una referencia de dónde obtuvo esta información?¿Cuándo se activa realmente PreApplicationStartMethod para ejecutarse?

¿Esto cambia en IIS 7.5?

Respuesta

24

WebActivator PreApplicationStart en realidad se basa en ASP.NET PreApplicationStartMethodAttribute (ver this enlace para ver cómo funciona el activador web).

PreApplicationStartMethodAttribute funciona cuando ASP.NET runtime starts up la aplicación y el código se ejecuta al principio de la canalización incluso antes de que se active el evento app_start. Entonces, para responder a su pregunta, el desencadenante ocurriría cuando se realizara la primera solicitud al servidor web (lo que a su vez activará el inicio de la aplicación).

Tenga en cuenta que el desencadenador está relacionado con el inicio de la aplicación ASP.NET y no con el grupo de aplicaciones. Su grupo de aplicaciones podría estar ejecutándose debido a alguna otra aplicación (puede ser una aplicación que no sea ASP.NET), pero cuando llegue la primera solicitud para la aplicación ASP.NET, este desencadenante ocurrirá (para una aplicación determinada) porque la aplicación se inicia.

Si está utilizando la función auto-start, IIS reiniciará su aplicación en el reciclaje de su grupo de aplicaciones y, por lo tanto, se activará PreApplicationStart.

+0

El artículo que brindó de ScottGu fue genial. Tengo curiosidad por saber qué opinas sobre esta interfaz 'IProcessHostPreloadClient'. Dado que parece que puede tener su propia lógica de almacenamiento en caché antes de que la aplicación reciba su primera solicitud, ¿cree que es una buena alternativa en lugar de usar 'PreApplicationStartMethod' para ejecutar el código antes de que se reciban las solicitudes? – Eli

+0

@Eli, el propósito exacto de IProcessHostPreloadClient es agregar lógica de calentamiento para la aplicación (el código que tradicionalmente se ejecuta en el evento app_start o PreApplicationStartMethod. El único problema es que necesita IIS 7.5 y todavía hay pocos entornos de prueba basados ​​en Win 2003/2008 y entornos dev en XP. – VinayC

+0

@VinayC, la función de inicio automático NO activará Application_Start, ¿está seguro de que desencadena el evento PreApplicationStart? –

7

Un pequeño complemento a la respuesta de @VinayC: si agrega un punto de interrupción en su PreApplicationStartMehod y depura su aplicación web, puede ver que se invoca en cada solicitud. Confirmé fácilmente que este no es el comportamiento habitual al escribir en un archivo de registro en mi PreApplicationStartMethod. Cuando no está conectado al depurador, este método no se ejecuta en cada solicitud.

+0

En el método de inicio Azure 'WebActivator.PreApplicationStartMethod' se dispara varias veces. ¿Cuál podría ser el problema posible? – ManirajSS

+0

@ManirajSS Puede tener varias instancias de aplicaciones. http://stackoverflow.com/a/6957462/242520 –

Cuestiones relacionadas