2008-10-27 13 views
8

Según this MSDN articleHttpApplication. End Request se puede utilizar para cerrar o eliminar recursos. Sin embargo, este evento no se activa/llama en mi aplicación.ASP.NET HttpApplication.EndRequest evento no activado

Adjuntamos el gestor en Page_Load de la siguiente manera:

HttpContext.Current.ApplicationInstance.EndRequest += ApplicationInstance_EndRequest; 

La única manera de hacerlo es utilizar el controlador Application_EndRequest en Global.asax, pero esto no es aceptable para nosotros.

+0

Si proporciona más información sobre qué recursos está tratando de eliminar y cómo los usa, alguien puede decirle dónde debe hacerlo. – Will

Respuesta

14

Puede utilizar su propio HttpModule para capturar EndRequest si no desea utilizar el archivo global.asax.

public class CustomModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.EndRequest += new EventHandler(context_EndRequest); 
    } 

    private void context_EndRequest(object sender, EventArgs e) 
    { 
     HttpContext context = ((HttpApplication)sender).Context; 
     // use your contect here 
    } 
} 

es necesario agregar el módulo a su web.config

<httpModules> 
    <add name="CustomModule" type="CustomModule"/> 
</httpModules> 
+1

¿Por qué es este el caso? ¿Por qué el evento no se dispara sin estar en un httpmodule? – mcintyre321

+0

Lea la respuesta de Mitchel Sellers, esa es la razón. La forma más simple sería usar el archivo.asax global, pero si no puede usarlo, puede suscribirse a su propio módulo para captar la solicitud. –

1

La página probablemente se está eliminando antes de que se desate el evento. Es posible que desee intentar hacer su trabajo en el controlador Page_Unload.

+0

Lo necesitamos en el nivel de Solicitud. Ya tenemos una solución para esto, pero estoy interesado, de hecho, no está funcionando como debería según la documentación de MSDN que dice: El evento EndRequest siempre se produce cuando se llama al método CompleteRequest. – Crank

5

Según la documentación de MSDN, este evento se produce DESPUÉS de que se completa la página, al igual que BeginRequest. Por lo tanto, hasta donde yo sé, no es posible detectar esto en el nivel de página

+0

Un pensamiento que puede ser complicado para el depurador para atrapar este evento. Pero agregué un código que no fue llamado (estoy seguro). – Crank

2

Creo que una mejor manera de cadena de este evento está proporcionando una clase base a Global.asax

Language="C#" Inherits="YourBaseClass" 

y luego anulando Init():

public override void Init() 
{ 
    base.Init(); 

    BeginRequest += new EventHandler(OnBeginRequest); 
    EndRequest += new EventHandler(OnEndRequest); 
} 

parece estar funcionando para mí (tomar un punto de quiebre) pero realmente estoy haciendo algo con eso.

Dado que hay varias instancias de HttpApplication, al establecerlo en Page_load puede seguir agregándolo a una instancia no específica. Curiosamente, también he notado que HttpApplication.Init() no se llama para la primera instancia de HttpApplication (pero Application_start) sí.

Cuestiones relacionadas