asp.net - आईआईएस 7 में 'क्लासिक' और 'एकीकृत' पाइपलाइन मोड के बीच क्या अंतर है?




asp.net-mvc iis iis-7 integrated-pipeline-mode (5)

मैं कल रात एएसपी.नेट एमवीसी एप्लीकेशन तैनात कर रहा था, और पाया कि आईआईएस 7 सेट को एकीकृत मोड में तैनात करने के लिए यह कम काम है। मेरा सवाल यह है कि क्या अंतर है? और एक या दूसरे का उपयोग करने के प्रभाव क्या हैं?


Answers

क्लासिक मोड में आईआईएस एच आईएसएपीआई एक्सटेंशन और आईएसएपीआई फ़िल्टर सीधे काम करता है। और दो पाइप लाइनों का उपयोग करता है, एक देशी कोड के लिए और अन्य प्रबंधित कोड के लिए। आप बस इतना कह सकते हैं कि क्लासिक मोड IIS 7.x में आईआईएस 6 के रूप में काम करता है और आपको आईआईएस 7.x सुविधाओं से अतिरिक्त लाभ नहीं मिलते हैं।

क्लासिक मोड के मामले में एएसपीनेट पर केवल दो डीएलएल के आधार पर एकीकृत मोड आईआईएस और एएसपी.Net को कसकर जोड़ दिया जाता है।


क्लासिक मोड (आईआईएस 6 और नीचे का एकमात्र मोड) एक ऐसा तरीका है जहां आईआईएस केवल आईएसएपीआई एक्सटेंशन और आईएसएपीआई फ़िल्टर के साथ काम करता है। असल में, इस मोड में, एएसपी.नेट सिर्फ एक आईएसएपीआई एक्सटेंशन (aspnet_isapi.dll) और एक आईएसएपीआई फ़िल्टर (aspnet_filter.dll) है। आईआईएस सिर्फ आईएसएपीआई में लागू बाहरी प्लगइन के रूप में एएसपी.नेट का इलाज करता है और इसके साथ ब्लैक बॉक्स की तरह काम करता है (और केवल तभी जब इसे एएसपी.नेट को अनुरोध देने की आवश्यकता होती है)। इस मोड में, एएसपी.NET आईआईएस के लिए PHP या अन्य प्रौद्योगिकियों से बहुत अलग नहीं है।

दूसरी तरफ, एकीकृत मोड आईआईएस 7 में एक नया तरीका है जहां आईआईएस पाइपलाइन कसकर एकीकृत है (यानी वही है) एएसपी.नेट अनुरोध पाइपलाइन के रूप में। एएसपी.नेट हर अनुरोध को देख सकता है जो वह चाहता है और रास्ते में चीजों में हेरफेर कर सकता है। एएसपी.नेट अब बाहरी प्लगइन के रूप में नहीं माना जाता है। यह आईआईएस में पूरी तरह से मिश्रित और एकीकृत है। इस मोड में, एएसपी.नेट HttpModule मूल रूप से लगभग उतनी ही शक्ति होती है जितनी आईएसएपीआई फ़िल्टर के पास होती थी और एएसपी.NET HttpHandler पास लगभग आईएसएपीआई एक्सटेंशन के बराबर क्षमता हो सकती है। इस मोड में, एएसपी.नेट मूल रूप से आईआईएस का हिस्सा है।


एकीकृत अनुप्रयोग पूल मोड

जब एक अनुप्रयोग पूल एकीकृत मोड में होता है, तो आप आईआईएस और एएसपी.नेट के एकीकृत अनुरोध-प्रसंस्करण वास्तुकला का लाभ उठा सकते हैं। जब किसी एप्लिकेशन पूल में कोई कार्यकर्ता प्रक्रिया अनुरोध प्राप्त करती है, तो अनुरोध ईवेंट की ऑर्डर की गई सूची से गुज़रता है। प्रत्येक घटना अनुरोध के भाग को संसाधित करने और प्रतिक्रिया उत्पन्न करने के लिए आवश्यक देशी और प्रबंधित मॉड्यूल को कॉल करती है।

एकीकृत मोड में एप्लिकेशन पूल चलाने के कई फायदे हैं। सबसे पहले आईआईएस और एएसपी.नेट के अनुरोध-प्रसंस्करण मॉडल एक एकीकृत प्रक्रिया मॉडल में एकीकृत किए गए हैं। यह मॉडल आईआईएस और एएसपी.नेट, जैसे प्रमाणीकरण में पहले डुप्लिकेट किए गए चरणों को समाप्त करता है। इसके अतिरिक्त, एकीकृत मोड सभी सामग्री प्रकारों में प्रबंधित सुविधाओं की उपलब्धता को सक्षम बनाता है।

क्लासिक एप्लिकेशन पूल मोड

जब क्लासिक मोड में कोई एप्लिकेशन पूल होता है, तो आईआईएस 7.0 आईआईएस 6.0 कार्यकर्ता प्रक्रिया अलगाव मोड में अनुरोधों को संभालता है। एएसपी.NET अनुरोध पहले आईआईएस में देशी प्रसंस्करण चरणों के माध्यम से जाते हैं और फिर प्रबंधित रनटाइम में प्रबंधित कोड की प्रसंस्करण के लिए Aspnet_isapi.dll पर जाते हैं। अंत में, प्रतिक्रिया भेजने के लिए आईआईएस के माध्यम से अनुरोध वापस भेजा गया है।

आईआईएस और एएसपी.नेट अनुरोध-प्रसंस्करण मॉडल के इस अलगाव के परिणामस्वरूप प्रमाणीकरण और प्रमाणीकरण जैसे कुछ प्रसंस्करण चरणों के दोहराव में परिणाम मिलता है। इसके अतिरिक्त, प्रबंधित प्रमाणीकरण जैसे प्रबंधित कोड सुविधाएं, केवल एएसपी.NET अनुप्रयोगों या अनुप्रयोगों के लिए उपलब्ध हैं जिनके लिए आपके पास स्क्रिप्ट है, सभी अनुरोधों को aspnet_isapi.dll द्वारा प्रबंधित किया जा सकता है।

उत्पादन वातावरण को आईआईएस 7.0 में अपग्रेड करने और एकीकृत मोड में एप्लिकेशन पूल में एप्लिकेशन असाइन करने से पहले एकीकृत मोड में संगतता के लिए अपने मौजूदा अनुप्रयोगों का परीक्षण करना सुनिश्चित करें। यदि एप्लिकेशन एकीकृत मोड में काम करने में विफल रहता है तो आपको केवल क्लासिक मोड में एप्लिकेशन पूल में एक एप्लिकेशन जोड़ना चाहिए। उदाहरण के लिए, आपका एप्लिकेशन आईआईएस से प्रबंधित रनटाइम में पारित प्रमाणीकरण टोकन पर भरोसा कर सकता है, और, आईआईएस 7.0 में नए आर्किटेक्चर के कारण, प्रक्रिया आपके आवेदन को तोड़ देती है।

से लिया गया: IIS7 में DefaultAppPool और क्लासिक .NET AppPool के बीच क्या अंतर है?

मूल स्रोत: आईआईएस वास्तुकला का परिचय


क्लासिक मोड आमतौर पर, आईआईएस 6.0 से आईआईएस 7.0 क्लासिक मोड में वेब एप्लिकेशन को ले जाने की आवश्यकता होती है केवल क्लासिक मोड में चल रहे एप्लिकेशन पूल में एप्लिकेशन को रखना आवश्यक है। उदाहरण के लिए, जब आप IIS 7.0 को डिफ़ॉल्ट रूप से स्थापित करते हैं, तो वेब सर्वर को एकीकृत मोड में संचालित करने के लिए कॉन्फ़िगर किया गया है। यह डिफ़ॉल्ट अनुप्रयोग पूल के अंतर्गत चलाने के लिए भी कॉन्फ़िगर किया गया है, जिसे DefaultAppPool कहा जाता है। क्लासिक मोड में वेब अनुप्रयोग चलाने के लिए, क्लासिक .NETAppPool एप्लिकेशन का उपयोग करें या क्लासिक मोड में चलाने के लिए कॉन्फ़िगर किया गया एक नया एप्लिकेशन पूल बनाएं। एप्लिकेशन पूल बनाने के तरीके के बारे में जानकारी के लिए, एक एप्लिकेशन पूल बनाएं देखें। क्लासिक मोड में चल रहे किसी एप्लिकेशन में IHttpModule इंटरफ़ेस को लागू करने वाले किसी भी कस्टम मॉड्यूल को केवल एएसपी.NET रनटाइम द्वारा प्रबंधित किए गए पाइपलाइन अनुरोधों के बारे में सूचित किया जाता है। उदाहरण के लिए, उन्हें .aspx पृष्ठ के अनुरोधों के बारे में सूचित किया जाता है। क्लासिक मोड के लिए एप्लिकेशन लाइफ चक्र आईआईएस 6.0 में एएसपी.नेट के लिए जीवन चक्र जैसा ही है। अधिक जानकारी के लिए, आईआईएस 5.0 और 6.0 के लिए एएसपी.NET एप्लिकेशन लाइफ साइकिल अवलोकन देखें। यदि क्लासिक मोड में चलने वाले एक एप्लिकेशन में एक हैंडलर होता है जिसके लिए आईआईएस में कस्टम एक्सटेंशन को संभालने के लिए स्क्रिप्ट मैप की आवश्यकता होती है, तो आपको httpHandler समूह और हैंडलर समूह दोनों में हैंडलर पंजीकृत करना होगा। आप हैंडलर तत्व में मॉड्यूल और स्क्रिप्ट प्रोसेसर विशेषताओं को निर्दिष्ट करके ASP.NET ISAPI एक्सटेंशन (Aspnet_isapi.dll) पर कस्टम फ़ाइल-नाम एक्सटेंशन को मैप करते हैं। ये गुण निर्दिष्ट करते हैं कि हैंडलर को परिभाषित करने वाला मॉड्यूल एक आईएसएपीआई एक्सटेंशन है, और वे उस एक्सटेंशन का पथ निर्दिष्ट करते हैं। क्लासिक मोड में आईआईएस 7.0 आईआईएस के पिछले संस्करणों के साथ पिछड़ा संगतता प्रदान करता है। हालांकि, यदि आप एकीकृत मोड में एप्लिकेशन चलाते हैं, तो आपको मॉड्यूल और स्क्रिप्ट प्रोसेसर विशेषताओं को हटा देना होगा। अधिक जानकारी के लिए, देखें कि कैसे IIS में HTTP हैंडलर एक्सटेंशन कॉन्फ़िगर करें। जब आप आईआईएस 6.0 से क्लासिक मोड में वेब एप्लिकेशन ले जाते हैं, तो इसे बिना किसी बदलाव के एकीकृत मोड में काम करने की गारंटी नहीं है। यदि आप क्लासिक मोड से इंटीग्रेटेड मोड (और किसी भी कस्टम मॉड्यूल और हैंडलर को बदलें) से एप्लिकेशन स्विच करते हैं, तो आपको एकीकृत मोड में एप्लिकेशन को सही तरीके से चलाने के लिए अतिरिक्त परिवर्तन करना पड़ सकता है। इस विषय में अगला अनुभाग बताता है कि एप्लिकेशन को आईआईएस 7.0 एकीकृत मोड में कैसे स्थानांतरित किया जाए।

एकीकृत मोड वेब अनुप्रयोग जिनमें कस्टम मॉड्यूल या हैंडलर शामिल नहीं हैं आमतौर पर आईआईएस 7.0 में एकीकृत मोड में बदलाव किए बिना काम करेंगे। कस्टम मॉड्यूल या हैंडलरों पर भरोसा करने वाले वेब अनुप्रयोगों को एकीकृत मोड में एप्लिकेशन को चलाने में सक्षम करने के लिए निम्न चरणों की आवश्यकता होती है: माइग्रेटिंग में वर्णित विधियों में से किसी एक का उपयोग करके Web.config फ़ाइल के system.web सर्वर अनुभाग में कस्टम मॉड्यूल और हैंडलर पंजीकृत करें इस विषय में बाद में एकीकृत मोड अनुभाग में एक वेब कॉन्फ़िगर फ़ाइल। कस्टम मॉड्यूल की इनिट विधि में केवल BeginRequest और EndRequest जैसे Http अनुप्रयोग अनुरोध पाइपलाइन ईवेंट के लिए इवेंट हैंडलर को परिभाषित करें। सुनिश्चित करें कि आपने आईआईएस 7.0 में एएसपी.NET अनुप्रयोगों को अपग्रेड करने के एकीकृत "मोड और क्लासिक मोड के बीच ज्ञात मतभेद" अनुभाग में चर्चा किए गए किसी भी मुद्दे को संबोधित किया है: आईआईएस 7.0 एकीकृत मोड और क्लासिक मोड के बीच मतभेद। IHttpModule इंटरफ़ेस को लागू करने वाले मॉड्यूल को प्रबंधित-कोड मॉड्यूल के रूप में संदर्भित किया जाता है क्योंकि वे .NET Framework का उपयोग कर बनाए जाते हैं। प्रबंधित कोड कोड मॉड्यूल सर्वर स्तर पर या आवेदन स्तर पर पंजीकृत किया जा सकता है। मूल-कोड मॉड्यूल डीएलएल (गैर-प्रबंधित कोड) हैं जो केवल सर्वर स्तर पर पंजीकृत हैं। कोर एएसपी.नेट सुविधाओं, जैसे कि सत्र राज्य और प्रपत्र प्रमाणीकरण, एकीकृत मोड में प्रबंधित मॉड्यूल के रूप में लागू किए जाते हैं। जब आप क्लासिक से इंटीग्रेटेड मोड में किसी एप्लिकेशन को ले जाते हैं, तो आप क्लासिक मोड के लिए कस्टम मॉड्यूल और हैंडलर पंजीकरण छोड़ सकते हैं, या आप उन्हें हटा सकते हैं। यदि आप क्लासिक मोड में उपयोग किए जाने वाले httpModules और httpHandlers रजिस्ट्रेशन को नहीं हटाते हैं, तो आपको त्रुटियों से बचने के लिए सत्यापन तत्व की वैध एकीकृत इंटीग्रेटेड मोड कॉन्फ़िगरेशन विशेषता को गलत पर सेट करना होगा। सत्यापन तत्व system.web सर्वर तत्व का एक बाल तत्व है। अधिक जानकारी के लिए, IIS 7.0 के साथ ASP.NET एकीकरण में "माइग्रेशन संदेश अक्षम करना" अनुभाग देखें।


यहां मूल पैटर्न है:

  • मूल्य के लिए कैश की जांच करें, अगर यह उपलब्ध हो तो वापस लौटें
  • यदि मान कैश में नहीं है, तो लॉक को लागू करें
  • लॉक के अंदर, फिर से कैश की जांच करें, हो सकता है कि आप अवरुद्ध हो जाएं
  • मूल्य को देखो और इसे कैश करें
  • लॉक जारी करें

कोड में, ऐसा लगता है:

private static object ThisLock = new object();

public string GetFoo()
{

  // try to pull from cache here

  lock (ThisLock)
  {
    // cache was empty before we got the lock, check again inside the lock

    // cache is still empty, so retreive the value here

    // store the value in the cache here
  }

  // return the cached value here

}






asp.net asp.net-mvc iis iis-7 integrated-pipeline-mode