Se llama al método HttpModule Init varias veces, ¿por qué?

Estaba creando un módulo http y, al depurar, noté algo que al principio (al menos) parecía un comportamiento extraño.

Cuando establezco un punto de interrupción en el método init del httpmodule puedo ver que se está llamando varias veces al método init del módulo http, aunque solo he iniciado el sitio web para la depuración y he realizado una sola solicitud (a veces solo se pulsa 1 vez) , otras veces hasta 10 veces).

Sé que debo esperar que se ejecuten varias instancias de HttpApplication y para cada uno de ellos se crearán los módulos http, pero cuando solicito una sola página, debe ser manejada por un solo objeto de aplicación http y, por lo tanto, solo se activan los eventos asociados una vez. pero aún así, los eventos se activan varias veces para cada solicitud, lo que no tiene sentido, aparte de que se debe haber agregado varias veces dentro de la aplicación http, lo que significa que es el mismo método httpmodule init al que se llama cada vez y no una nueva aplicación http se crea cada vez que llega a mi punto de ruptura (vea el ejemplo de mi código en la parte inferior, etc.).

¿Qué podría estar yendo mal aquí? ¿es porque estoy depurando y establezco un punto de interrupción en el módulo http?

Se ha dado cuenta de que parece que si inicio el sitio web para la depuración y paso rápidamente sobre el punto de interrupción en el httpmodule, solo se aplicará al método init una vez y lo mismo se aplicará al manejador de eventos. Si, por el contrario, lo dejo colgado en el punto de interrupción durante unos segundos, se llama al método init varias veces (parece que depende de cuánto tiempo espere antes de pasar por encima del punto de interrupción). Tal vez esto podría ser alguna característica incorporada para asegurarse de que el httpmodule esté inicializado y la aplicación http pueda atender solicitudes, pero también parece ser algo que podría tener consecuencias catastróficas.

Esto podría parecer lógico, ya que podría estar intentando finalizar la solicitud y, como he establecido el punto de interrupción, ¿cree que algo salió mal y trato de llamar de nuevo al método init? Soo puede manejar la solicitud?

¿Pero es esto lo que está sucediendo y todo está bien (solo estoy adivinando), o es un problema real?

Lo que me preocupa especialmente es que si algo lo hace colgar en el servidor "producción / en vivo" durante unos segundos, se agregan muchos controladores de eventos a través del inicio y, por lo tanto, cada solicitud a la página de repente dispara al controlador de eventos varias veces.

Este comportamiento podría derribar rápidamente cualquier sitio.

He mirado el código "original" de .net que se usa para los httpmodules para la autenticación de formularios y el módulo de servidor de rol, etc. pero mi código no es diferente al que usan esos módulos.

Mi código se ve así.

    public void Init(HttpApplication app)
    {
        if (CommunityAuthenticationIntegration.IsEnabled)
        {
            FormsAuthenticationModule formsAuthModule = (FormsAuthenticationModule) app.Modules["FormsAuthentication"];         

            formsAuthModule.Authenticate += new FormsAuthenticationEventHandler(this.OnAuthenticate);
        }
    }

Aquí hay un ejemplo de cómo se hace en el RoleManagerModule desde el framework .NET.

    public void Init(HttpApplication app)
    {
        if (Roles.Enabled)
        {
            app.PostAuthenticateRequest += new EventHandler(this.OnEnter);
            app.EndRequest += new EventHandler(this.OnLeave);
        }
    }

¿Alguien sabe lo que está pasando?

(Solo espero que alguien pueda decirme por qué sucede esto y asegurarme que todo está perfectamente bien) :)

ACTUALIZAR:

He intentado reducir el problema y hasta ahora he encontrado que el método Init que se está llamando siempre está en un nuevo objeto de mi módulo http (en relación con lo que pensé antes).

Parece que para la primera solicitud (al iniciar el sitio) todos los objetos HttpApplication que se están creando y sus módulos están tratando de atender la primera solicitud y, por lo tanto, todos llegan al controlador de eventos que se está agregando. Realmente no puedo entender por qué esto está sucediendo.

Si solicito otra página, todas las aplicaciones HttpApplication creadas (y sus modulares) intentarán nuevamente servir la solicitud, lo que causará que golpee al manejador de eventos varias veces.

Pero también parece que si vuelvo a la primera página (u otra), solo una HttpApplication comenzará a atender la solicitud y todo será como se espera, siempre y cuando no lo deje colgar en un punto de interrupción.

Si lo dejo colgado en un punto de interrupción, comienza a crear nuevos objetos HttpApplication y comienza a agregar HttpApplications (más de 1) para atender / manejar la solicitud (que ya está siendo procesada por la aplicación HttpApplication que se encuentra actualmente detenida en el punto de interrupción) .

Supongo o espero que pueda ser una forma inteligente "detrás de escena" de ayudar a distribuir y manejar la carga y / o los errores. Pero no tengo ni idea. Espero que alguien pueda asegurarme que está perfectamente bien y cómo se supone que sea.

Respuestas a la pregunta(4)

Su respuesta a la pregunta