Enganche en Application_Start en un HttpModule

Estoy implementando un HttpModule simple, donde quiero que se ejecute algo de código cuando se inicie la aplicación web. Pero me sorprende encontrar que el evento Application_Start que usaría normalmente desde Global.asax no está disponible desde un HttpModule. ¿Es correcto, o me estoy perdiendo algo aquí?

¿Cómo me conecto al evento Application_Start desde un HttpModule?

Actualizar:
He llegado a una solución simple utilizando el evento Init en su lugar, pero aún me huele un poco raro.

PUEDES usar HttpModule para manejar el evento de inicio de aplicación

Contrariamente a otros que solo escriben / creen lo que leen, he hecho mi propia parte y descubrí que es posible manejar el inicio de la aplicación utilizando un módulo HTTP. Es un truco realmente pero funciona de manera confiable. Definitivamente no es algo que alguien deba evitar, porque también lo he visto en los módulos de MS (es decir, Sharepoint 2010 SPRequestModule ). Esta publicación del blog ( Escribir un IHttpModule personalizado que maneje el evento Application_Start ) te proporcionará toda la información que necesitas saber. sobre esto. Lo he hecho yo mismo y simplemente funciona. Pero debes tener un poco de cuidado al usar recursos comunes, ya que tu aplicación puede comenzar a comportarse de manera extraña. Para evitar esto, te sugiero que leas una publicación de blog adicional mía, que explique por qué sucede esto y cómo evitarlo.

Si también desea que sea seguro para subprocesos, también puede bloquear la ejecución y luego marcar el módulo como la aplicación iniciada . Es la forma más segura de hacerlo.

 private static bool isStarted = false; private static object moduleStart = new Object(); ... if (!isStarted) { lock(moduleStart) { if (!isStarted) { // handle aplication start ... isStarted = true; } } } 

He creado mi propia biblioteca que se engancha a aplicaciones existentes como Sharepoint 2010. No quiero cambiar Global.asax de Sharepoint, ¿verdad? Usando la técnica explicada en la publicación del blog, pude conectarlo. Fácilmente.

Y supongo que esto es exactamente lo que has estado buscando. Conectarse al evento de inicio de una aplicación arbitraria agregando un módulo en web.config . Hacerlo de esta forma. Funcionará.

Estoy de acuerdo con Darin.

La razón es que la aplicación debe cargarse para cargar módulos. ¿Cómo puede ejecutar el código dentro del módulo antes de que la aplicación esté lista para comenzar a cargar el módulo?

¿Que estás tratando de hacer? Podría valer la pena evaluar cómo se ve la idea de su solución 🙂

Espero que esto ayude 🙂

No se puede adjuntar al evento Application_Start en un HttpModule. Aquí hay una lista de los eventos disponibles .

De hecho, hay, y siempre habrá, solo una instancia de un módulo http específico hasta que se recicle el grupo de aplicaciones. Y, por supuesto, por w3wp.exe trabajador de su aplicación web.

En otras palabras, use el método de inicio o el constructor para realizar la inicialización, precargar datos, etc.;) y no use campos estáticos, excepto que debe realizar el locking una vez que las solicitudes comiencen a activar eventos a los que se suscribió el módulo y necesita cambiar los datos que controla su módulo o contiene como propiedades. De todos modos, se llama al método init en el inicio de la aplicación.

¿Cómo se sabe si el Init () con el código de locking será el primero de los módulos en ser llamado? ¿Seguramente otros módulos podrían ser instanciados primero? ¿No es esa la diferencia para el evento Application_Start de Global.asax – se garantiza que será el primero en ser llamado por diseño?

Me interesé en este hilo y en cómo comenzó un sitio web al corregir un error en un antiguo sitio ASP.NET.

Así que armé una demo, para ver cómo funcionaría. Parece que el orden es de la web.config.

Puede ver aquí https://github.com/jradxl/MVC-Website-Without-Global.asax.cs Implementa la solución de Robert Koritnik – gracias