2009-06-06 10 views
21

क्यों कहा जाता है क्या कोई बता सकता है कि से प्राप्त कस्टम क्लास का कन्स्ट्रक्टर एचटीपी एप्लीकेशन एप्लिकेशन स्टार्टअप पर कई बार कहलाता है?एचटीपी एप्लीकेशन कन्स्ट्रक्टर को कई बार

मेरे कोड संरचना है निम्नलिखित:
- मेरी वैश्विक Global.asax में वर्ग से CustomApp वर्ग में योगदान दिया।
- CustomApp वर्ग से HttpApplication वर्ग

वैश्विक वर्ग स्टार्टअप पर बनाई गई है निकला है, लेकिन जब मैं निर्माता में एक ब्रेकपाइंट जगह है, यह कई बार अनुरोध किया गया है! मैंने सोचा कि आवेदन वर्ग का केवल एक उदाहरण होना चाहिए?

क्या मैं गलत हूँ?

युपीडी: वेब सर्वर वास्तव में कई HttpApplication उदाहरणों एक ही समय में आ रही कई अनुरोधों को संसाधित करने बना सकते हैं। यह विशेष रूप से स्पष्ट हो जाता है जब आप अपने HttpAplication वंश के निर्माता में ब्रेकपॉइंट डालते हैं। क्लाइंट (http सामग्री, सीएसएस फाइल इत्यादि) से कई अनुरोध लंबित होंगे और उनमें से प्रत्येक को सेवा देने के लिए वेब सर्वर HttpApp के नए उदाहरण बनाएगा। तो, अनुप्रयोग प्रारंभिक तर्क लिखते समय, इससे सावधान रहें।

+0

क्या इस व्यवहार को प्रदर्शित करने वाले कट-डाउन कोड स्निपेट को पोस्ट करना संभव है? –

उत्तर

15

मेरा मानना ​​है कि एएसपी.नेट रनटाइम प्रति एप्लिकेशन डोमेन से एक से अधिक एचटीपी एप्लीकेशन बना सकता है। तो HttpAplication.Init और सीटीओआर एक से अधिक बार बुलाया जा सकता है।

यदि आप प्रारंभिक कोड चाहते हैं जो केवल एक बार चलता है, तो आपको एप्लिकेशन_स्टार्ट ईवेंट का उपयोग करना चाहिए जिसे केवल प्रति ऐप में ही बुलाया जाएगा।

+0

क्या कोई ईवेंट (या समान) है जिसे मैं एप्लाशन_स्टार्ट के लिए हुक कर सकता हूं क्योंकि मुझे वेबसाइट के बाहर मेरा एचटीपी एप्लीकेशन क्लास होना चाहिए? –

+1

Global.asax.cs में बस एक विधि 'Applcation_Start' को कार्यान्वित करें और इसे स्वचालित रूप से वायर्ड किया जाएगा और स्टार्ट टाइम पर कॉल किया जाएगा। http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

ध्यान रखें, हालांकि, 'AuthenticateRequest' या' AcquireRequestState' जैसी घटनाएं आग नहीं होती हैं यदि आप 'ईवेंट_स्टार्ट' में ईवेंट हैंडलर पंजीकृत करते हैं () '। आप उन्हें 'इनिट()' में पंजीकृत करना चाहते हैं जो 'HttpAplication 'के लिए ओवरराइड है। – Manfred

6

कृपया global.asax in ASP.NET पर एक पोस्ट देखें - यह बताता है कि HttpAplication के कई उदाहरण क्यों हैं। असल में दो पूल हैं: विशेष और सामान्य। सामान्य पूल में Http अनुप्रयोग का उदाहरण होता है जिसका उपयोग अनुरोधों द्वारा किया जाता है (प्रत्येक अनुरोध का अपना स्वयं का Http अनुप्रयोग उदाहरण होता है)। विशेष पूल में एचटीपी एप्लीकेशन ऑब्जेक्ट्स शामिल हैं जो एप्लिकेशन-स्तरीय ईवेंट (जैसे एप्लिकेशन_स्टार्ट, एप्लिकेशन_इरर) के लिए उपयोग किए जाते हैं।

+0

बहुत रोचक, धन्यवाद! – Andy

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