2009-04-18 31 views
13

'u çağırmıyor. Her isteğin sonunda bazı eylemler gerçekleştirmeye çalışıyorum. lambda denilen almazsınızASP.NET MVC, global.asax 'EndRequest

protected void Application_Start() 
{ 
    EndRequest += (s, e) => 
    { 
     Console.Write("fghfgh"); 
    }; 
    RegisterRoutes(RouteTable.Routes); 
} 

: Ben Application_Start() o bir test yapmak için yeni bir proje oluştururken oluşturulur değişti. Herhangi bir fikir neden?

düzenleme: onlar SharpArch [http://code.google.com/p/sharp-architecture/] benzer şeyi yapıyorlar ve orada çalışır ... Ve hayır, ben HttpModule'ü kullanmak istemiyorum görüyoruz .

edit2: Farklı kullanılarak çağrılan Application_EndRequest gibi görünüyor çünkü

private static WebSessionStorage wss; 
protected void Application_Start() 
{ 
    //... 
    wss = new WebSessionStorage(this); 
    //... 
} 

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    wss.EndRequest(sender, e); 
} 

wss özel olması gerekir: buldum tek geçici çözüm global.asax özel bir statik üyesi ile paralel olarak Application_EndRequest kullanmaktır örnek nesne (bu). Bu da benim olayımın (başlangıçta açıklandığı gibi) çağrılmamasının nedeni olabilir.

+0

u shoudl bunun için bir cevap kabul et – Simon

+0

Bunun gibi davranışı hakkında daha fazla bilgiyi buradan edinebilirsiniz: http://devhawk.net/2009/08/06/I+Hate+Globalasax.aspx –

cevap

16

Genellikle yapın: beklendiği gibi

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
} 

Bu çalışır. Olay hakkında bilmiyorum.

+0

Aslında bunu geçiyorum Örneğin bazı nesneye, kendi işleyicisiyle kancalanır. Bu yüzden Application_EndRequest'i kullanamıyorum. – user87338

+0

Neye giriyorsunuz? –

+0

Application_Start yapıyorum: NHSession.Init (yeni WebSessionStorage (this)); WebSessionManager, kendi cetinde kancalar: genel WebSessionStorage (HttpApplication uygulaması) { app.EndRequest + = Application_EndRequest; } – user87338

5

En iyi seçiminiz bunu bir HttpModule'de yapmaktır. Bir MVC uygulamasında NHibernate oturumunu yönetmek için bir HttpModule kullanıyorum ve mükemmel çalışıyor. Başlatma isteğinde sessionFactory'ı ManagedWebSessionContext'e (NHibernate'de ama oldukça belgeli olmayan) bağladım ve sonra da son istekte herhangi bir işlem gerçekleştiriyorum ve sessionFactory'yi çözüyorum.

Bunu bir HttpModule'ye ayırmanın daha temiz olduğunu düşünüyorum.

16

Global.asax dosyanız tarafından temsil edilen HttpApplication örneği, yalnızca ilk HttpApplication nesnesini temsil eden tek bir örnektir. HttpApplication'ın bu örneğinin başka herhangi bir istek için kullanılacağı garanti edilmez.

Sen Global.asax içinde Init() yöntemini geçersiz gerekir ve o yönteminde istediğiniz herhangi kanca olayları:

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

    EndRequest += MyEventHandler; 
} 

HttpApplication nesne üzerinde daha fazla bilgi için this MSDN article bakınız.