2009-04-03 32 views
436

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

+9

एकीकृत मोड बनाम क्लासिक के साथ तैनाती के लिए यह कम काम कैसे था? बस जिज्ञासा –

+9

@ पीटर: क्लासिक मोड में विस्तारित यूआरएल मैन्युअल रूप से मैप किए जाने की आवश्यकता है। –

+2

एमवीसी ग्लोबल.एक्सएक्स में भी नोट्स पढ़ते हैं: आईआईएस 6 या आईआईएस 7 क्लासिक मोड को सक्षम करने के निर्देशों के लिए, http://go.microsoft.com/?LinkId=9394801 पर जाएं। या आप केवल एकीकृत मोड चालू कर सकते हैं और System.Web.Mvc असेंबली शामिल कर सकते हैं और सबकुछ बस काम करता है। –

उत्तर

604

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

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

+41

मुझे बेंचमार्क तुलना – aron

+8

क्लासिक से धीमी गति से एकीकृत करना पसंद है? –

+1

@AlexanderN मैंने एक बेंचमार्क नहीं देखा है। –

98

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

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

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

क्लासिक अनुप्रयोग पूल मोड

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

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

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

से लिया: What is the difference between DefaultAppPool and Classic .NET AppPool in IIS7?

मूल स्रोत: Introduction to IIS Architecture

+22

अंतिम पैराग्राफ में मुख्य वाक्य: ** "यदि आप एकीकृत मोड में काम करने में विफल रहते हैं तो आपको क्लासिक मोड में एप्लिकेशन पूल में केवल एक ऐप्लिकेशन जोड़ना चाहिए।" ** – DavidRR

+6

एकीकृत मोड में काम करने में विफल क्यों होगा? – JsonStatham

+3

@ जेसनस्टाथम - इसका एक कारण यह है कि एकीकृत मोड एएसपी.NET प्रतिरूपण (साइट्स> आपकी साइट> आईआईएस> प्रमाणीकरण) का उपयोग नहीं कर सकता है। यदि आपके पास इंट्रानेट साइट है और Windows प्रमाणीकरण का उपयोग कर रहे हैं, तो यह एक महत्वपूर्ण विचार है। [कड़ी] (http://stackoverflow.com/questions/12966286/impersonate-domain-user-with-integrated-pipeline) – user3308241

5

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

एकीकृत मोड IIS और ASP.Net में कसकर बल्कि तो मिलकर क्लासिक मोड के मामले में Asp.net पर सिर्फ दो DLLs के आधार पर कर रहे हैं।

10

6,0 और पिछले संस्करणों IIS:

ASP.NET एक ISAPI विस्तार, एक सी एपीआई (सी प्रोग्रामिंग भाषा के आधार API) के माध्यम आईआईएस के साथ एकीकृत और अपने स्वयं के आवेदन और अनुरोध प्रसंस्करण मॉडल उजागर ।

यह प्रभावी ढंग से उजागर दो अलग-अलग सर्वर (अनुरोध/प्रतिक्रिया) पाइपलाइनों, देशी ISAPI फिल्टर और विस्तार घटकों के लिए एक, और एक अन्य कामयाब आवेदन घटकों के लिए। ASP.NET घटकों पूरी तरह ASP.NET ISAPI विस्तार बुलबुला अंदर निष्पादित हूं और मैं केवल आईआईएस स्क्रिप्ट नक्शा विन्यास में ASP.NET को मैप किया अनुरोधों के लिए।

गैर एएसपी.नेट सामग्री प्रकारों के लिए अनुरोध: - छवियों, टेक्स्ट फाइलों, एचटीएमएल पेज, और स्क्रिप्ट-कम एएसपी पेज, आईआईएस या अन्य आईएसएपीआई एक्सटेंशन द्वारा संसाधित किए गए थे और एएसपी.नेट को दिखाई नहीं दे रहे थे।

इस मॉडल की प्रमुख सीमा यह है कि ASP.NET मॉड्यूल और कस्टम ASP.NET अनुप्रयोग कोड द्वारा प्रदान की गई सेवाओं का अनुरोध करता है

एक स्क्रिप्ट एमएपी क्या है गैर ASP.NET लिए उपलब्ध नहीं थे था?

स्क्रिप्ट नक्शे ISAPI हैंडलर जब उस फ़ाइल प्रकार अनुरोध किया जाता है निष्पादित करता है उस के साथ फ़ाइल एक्सटेंशन संबद्ध करने के लिए उपयोग किया जाता है। स्क्रिप्ट नक्शा भी, जो यह सत्यापित अनुरोध

संसाधित करने के लिए अनुमति देने से पहले कि शारीरिक अनुरोध से संबद्ध फ़ाइल मौजूद एक वैकल्पिक सेटिंग एक अच्छा उदाहरण seen here

IIS 7 और बाद हो सकता है

IIS 7.0 और इसके बाद के संस्करण की गई जमीन से फिर से इंजीनियर है ऊपर एक नया सी ++ एपीआई आधारित ISAPI प्रदान करने के लिए।

IIS 7.0 और इसके बाद के संस्करण वेब सर्वर की मुख्य कार्यक्षमता के साथ ASP.NET क्रम एकीकृत करता है, एक एकीकृत (एकल) अनुरोध प्रक्रिया है कि के रूप में मॉड्यूल (IHttpModules) में जाना जाता है दोनों देशी और प्रबंधित घटकों

के संपर्क में है पाइप लाइन उपलब्ध कराने के

इसका मतलब क्या है कि आईआईएस 7 प्रक्रियाओं अनुरोध करता है कि किसी भी सामग्री प्रकार के लिए आते हैं, तो दोनों NON ASP.NET Modules/native IIS modules और ASP.NET modules साथ सभी चरणोंमें अनुरोध प्रसंस्करण प्रदान यही कारण है यही वजह है कि गैर ASP.NET सामग्री प्रकार (.html, स्थिर फ़ाइलें) कर सकते हैं .NET मॉड्यूल द्वारा संभाला जा सकता है।

  • आप नए प्रबंधित मॉड्यूल (IHttpModule) सभी आवेदन सामग्री के लिए निष्पादित करने की क्षमता है, और अपने आवेदन करने के लिए अनुरोध प्रसंस्करण सेवाओं का एक उन्नत सेट प्रदान की है कि निर्माण कर सकते हैं।
  • नए प्रबंधित हैंडलर (IHttpHandler)
4

क्लासिक मोड जोड़े आमतौर पर, आईआईएस के लिए IIS 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 एकीकृत मोड में कैसे स्थानांतरित किया जाए।

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

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

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