2009-04-18 12 views
13

पर कॉल नहीं करता है, मैं हर अनुरोध के अंत में कुछ क्रियाएं करने की कोशिश कर रहा हूं।एएसपी.नेट एमवीसी global.asax 'EndRequest

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

लैम्ब्डा बुलाया नहीं किया जाएगा: मैं Application_Start() है कि जब नई परियोजना बनाई गई एक परीक्षण बनाने के लिए उत्पन्न होता है बदल दिया है। कोई विचार क्यों?

संपादित करें: मैं देख रहा हूँ कि वे SharpArch [http://code.google.com/p/sharp-architecture/] में इसी तरह की बात कर रहे हैं और वहाँ काम करता है ... और नहीं, मैं एक HttpModule उपयोग करने के लिए नहीं करना चाहती।

EDIT2:

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 निजी क्योंकि यह Application_EndRequest की तरह लगता है अलग का उपयोग कर बुलाया जा रहा है होना चाहिए: केवल वैकल्पिक हल मैंने पाया Global.asax के एक निजी स्थिर सदस्य के साथ conjuction में Application_EndRequest उपयोग करने के लिए है उदाहरण वस्तु (यह)। यह मेरे कार्यक्रम का कारण भी हो सकता है (जैसा कि शुरुआत में वर्णित है) नहीं कहा जा रहा है।

+0

u shoudl इस – Simon

+0

के लिए उत्तर स्वीकार करते हैं आप इस बारे में और अधिक पढ़ सकते हैं कि यह इस तरह क्यों कार्य करता है: http://devhawk.net/2009/08/06/I+Hate+Globalasax.aspx –

उत्तर

16

मैं आमतौर पर करते हैं:

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

यह काम करता है के रूप में उम्मीद। हालांकि घटना के बारे में पता नहीं है।

+0

मैं वास्तव में यह पास करता हूं कुछ वस्तु के लिए उदाहरण, जो बदले में अपने हैंडलर के साथ हुक। इसलिए मैं User_EndRequest उपयोगकर्ता नहीं कर सकता। – user87338

+0

आप क्या पास कर रहे हैं? एप्लिकेशन_स्टार्ट में –

+0

मैं कर रहा हूं: NHSession.Init (नया वेब सत्र स्टोरेज (यह)); WebSessionManager अपने ctor में हुक: सार्वजनिक वेब सत्र स्टोरेज (एचटीपी अनुप्रयोग ऐप) { ऐप। एंड्रॉवेस्ट + = एप्लिकेशन_इंडरक्वेट; } – user87338

5

आपकी सबसे अच्छी शर्त यह है कि इसे HttpModule में करना है। मैं एक एमवीसी ऐप में एनएचबीर्नेट सत्र का प्रबंधन करने के लिए एक HttpModule का उपयोग करता हूं और यह पूरी तरह से काम करता है। शुरुआती अनुरोध में मैं सत्रवर्ती को प्रबंधित किया गया है WebagedWebSessionContext (NHibernate में लेकिन काफी अनियंत्रित) और फिर अंतिम अनुरोध में मैं कोई लेनदेन करता हूं और सत्र फैक्ट्री को अनबिंड करता हूं।

मुझे लगता है कि इसे एक HttpModule में अलग करने के लिए क्लीनर भी है।

16

एचटीपी अनुप्रयोग उदाहरण जो आपकी वैश्विक.एएसएक्स फ़ाइल द्वारा दर्शाया गया है वह एक उदाहरण है जो केवल पहले Http अनुप्रयोग ऑब्जेक्ट का प्रतिनिधित्व करता है। यह गारंटी नहीं है कि एचटीपी अनुप्रयोग का यह उदाहरण किसी अन्य अनुरोध के लिए उपयोग किया जाएगा।

आप Global.asax में Init() विधि ओवरराइड करने के लिए की जरूरत है और कि विधि में किसी भी देता है जिन्हें आप चाहते हैं हुक:

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

    EndRequest += MyEventHandler; 
} 

कृपया HttpApplication वस्तु के बारे में अधिक जानकारी के लिए this MSDN article को देखें।

संबंधित मुद्दे