c# एक एएसपी.नेट सेटिंग का पता चला है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होता है




asp.net iis (8)

<validation validateIntegratedModeConfiguration="false"/> जोड़ना लक्षण को संबोधित करता है, लेकिन सभी परिस्थितियों के लिए उपयुक्त नहीं है। इस मुद्दे के आसपास कुछ बार भागने के बाद, मैं दूसरों की मदद करने की उम्मीद करता हूं न केवल समस्या को दूर करता हूं बल्कि इसे समझता हूं। (जो आईआईएस 6 मिथक और अफवाह में फ्लेड्स के रूप में अधिक से अधिक महत्वपूर्ण हो जाता है।)

पृष्ठभूमि:

इस मुद्दे और आसपास के भ्रम ने एएसपी.नेट 2.0 और आईआईएस 7 के परिचय के साथ शुरू किया। आईआईएस 6 में केवल एक पाइपलाइन मोड था और यह आईआईएस 7+ कॉल "क्लासिक" मोड के बराबर है। आईआईएस 7+ पर चल रहे सभी अनुप्रयोगों के लिए दूसरा, नया, और अनुशंसित पाइपलाइन मोड को "एकीकृत" मोड कहा जाता है।

तो, क्या अंतर है? मुख्य अंतर यह है कि एएसपी.नेट आईआईएस के साथ कैसे बातचीत करता है।

  • क्लासिक मोड एक एएसपी.नेट पाइपलाइन तक सीमित है जो आईआईएस पाइपलाइन से बातचीत नहीं कर सकता है। अनिवार्य रूप से एक अनुरोध आता है और यदि आईआईएस 6 / क्लासिक को सर्वर कॉन्फ़िगरेशन के माध्यम से बताया गया है, तो एएसपी.नेट इसे संभाल सकता है तो आईआईएस एएसपी.NET के अनुरोध को बंद कर देता है और आगे बढ़ता है। इसका महत्व एक उदाहरण से प्राप्त किया जा सकता है। अगर मैं स्थैतिक छवि फ़ाइलों तक पहुंच को अधिकृत करना चाहता हूं, तो मैं इसे एएसपी.NET मॉड्यूल के साथ नहीं कर पाऊंगा क्योंकि आईआईएस 6 पाइपलाइन उन अनुरोधों को स्वयं ही संभाल लेगी और एएसपी.नेट उन अनुरोधों को कभी नहीं देख पाएगा क्योंकि उन्हें कभी नहीं दिया गया था * दूसरी तरफ, यह अधिकृत करने के लिए कि कौन से उपयोगकर्ता एक एक्सेस कर सकते हैं .एएसएक्सएक्स पेज जैसे कि Foo.aspx के लिए अनुरोध आईआईएस 6 / क्लासिक में भी छोटा है क्योंकि आईआईएस हमेशा उन अनुरोधों को एएसपी.नेट पाइपलाइन पर बंद कर देता है। क्लासिक मोड में एएसपी.नेट नहीं जानता कि उसे क्या बताया गया है और आईआईएस 6 / क्लासिक यह नहीं कह रहा है कि बहुत कुछ है।

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

त्रुटि पर काबू पाने:

  1. यदि आप मूल रूप से आईआईएस 6 के लिए बनाए गए पुराने एप्लिकेशन को चला रहे हैं, तो शायद आप इसे एक नए सर्वर पर ले जायेंगे, क्लासिक मोड में उस एप्लिकेशन के एप्लिकेशन पूल को चलाने में बिल्कुल कुछ भी गलत नहीं हो सकता है। आगे बढ़ो आपको बुरा महसूस करने की ज़रूरत नहीं है।
  2. फिर फिर से आप अपना आवेदन एक फेस-लिफ्ट दे रहे हैं या जब तक आप NuGet, मैन्युअल रूप से या किसी अन्य माध्यम से तृतीय पक्ष लाइब्रेरी स्थापित नहीं करते हैं, तब तक यह ठीक से चिपका रहा था। उस स्थिति में यह पूरी तरह से संभव है httpHandlers या httpModules system.web में जोड़ा गया है। नतीजा वह त्रुटि है जिसे आप देख रहे हैं क्योंकि validateIntegratedModeConfiguration डिफ़ॉल्ट validateIntegratedModeConfiguration डिफ़ॉल्ट true । अब आपके पास दो विकल्प हैं:

    1. httpHandlers से httpHandlers और httpModules तत्वों को निकालें। इससे कुछ संभावित परिणाम हैं:
      • सब ठीक काम करता है, एक आम परिणाम;
      • आपका आवेदन शिकायत जारी है, आपके द्वारा विरासत में प्राप्त होने वाले मूल फ़ोल्डर में web.config हो सकता है, उस वेब.कॉन्फिग को भी साफ करने पर विचार करें;
      • आप httpHandlers और httpModules को हटाने के थक गए हैं जो NuGet संकुल system.web जोड़ते रहते हैं, हे आपको जो चाहिए वह करें।
  3. यदि वे विकल्प काम नहीं करते हैं या इससे अधिक परेशानी हैं तो मैं आपको यह बताने वाला नहीं हूं कि आप validateIntegratedModeConfiguration करने के लिए validateIntegratedModeConfiguration नहीं किया जा सकता है, लेकिन कम से कम आप जानते हैं कि आप क्या कर रहे हैं और यह क्यों मायने रखता है।

अच्छा पढ़ता है:

* निश्चित रूप से वाइल्डकार्ड मैपिंग जैसे मंत्रों के माध्यम से आईआईएस 6 / क्लासिक से एएसपी.NET पाइपलाइन में सभी प्रकार की अजीब चीज़ें प्राप्त करने के तरीके हैं, अगर आपको उस तरह की चीज़ पसंद है।

मैंने DotNetOpenAuth SDK-3.4.5.10201.vsix इंस्टॉल किया है और मैं इसे काम नहीं कर सकता। यह स्थानीय रूप से काम करता है (जब मैं लोकलहोस्ट के रूप में चलाता हूं) लेकिन जब मैं इसे प्रकाशित करने का प्रयास करता हूं तो यह काम नहीं कर रहा है।

आईआईएस त्रुटि संदेश मुझे मिलता है

त्रुटि सारांश
HTTP त्रुटि 500.22 - आंतरिक सर्वर त्रुटि
एक एएसपी.नेट सेटिंग का पता चला है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होता है।

तथा

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

तो समस्या को हल करने के तरीके पर कुछ सुझाव दिए गए हैं:

चीजें आप कोशिश कर सकते हैं:

  • कॉन्फ़िगरेशन को system.webServer/modules अनुभाग में माइग्रेट करें। आप मैन्युअल रूप से या कमांड लाइन से AppCmd ​​का उपयोग करके कर सकते हैं - उदाहरण के लिए, %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/" । अपने एप्लिकेशन को माइग्रेट करने के लिए AppCmd का उपयोग करने से यह एकीकृत मोड में काम करने में सक्षम हो जाएगा, और क्लासिक मोड और आईआईएस के पिछले संस्करणों में काम करना जारी रखेगा।

  • यदि आप निश्चित हैं कि इस त्रुटि को अनदेखा करना ठीक है, तो इसे system.webServer/[email protected] को गलत पर सेट करके अक्षम किया जा सकता है।

  • वैकल्पिक रूप से, एप्लिकेशन को क्लासिक मोड एप्लिकेशन पूल पर स्विच करें - उदाहरण के लिए, %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool" । केवल तभी ऐसा करें यदि आप अपने आवेदन को माइग्रेट करने में असमर्थ हैं।
    (अपने एप्लिकेशन पथ और एप्लिकेशन पूल नाम पर "डिफ़ॉल्ट वेब साइट" और "क्लासिक .NET AppPool" सेट करें)

लेकिन समस्या यह है कि मेरे पास आईएसएस सर्वर तक पहुंच नहीं है क्योंकि मैं इसका मालिक नहीं हूं। क्या इसका हल करने का कोई तरीका है?


यदि आपको अभी भी HTTP मॉड्यूल का उपयोग करने की आवश्यकता है तो आपको इसे (.NET 4.0 ढांचे) को कॉन्फ़िगर करने की आवश्यकता है:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

मैं इस समस्या में भाग गया और @ जेरेमी कुक के जवाब से प्रेरित हूं, मैंने यह पता लगाने के लिए बुलेट को थोड़ा सा बताया कि आईआईएस 7 एकीकृत मोड ने मेरे web.config को पसंद नहीं किया। मेरा परिदृश्य यहां है:

  1. वेब एपीआई (संस्करण 4.0.030506.0 उर्फ ​​पुराना एक)
  2. .NET 4.0
  3. वेब एपीआई के लिए विशेषता रूटिंग 3.5.6 [spoiler चेतावनी: यह यह आदमी था!]

मैं एक परियोजना में विशेषता रूटिंग का उपयोग करना चाहता था (दुर्भाग्य से) .NET 4 का उपयोग करना पड़ा और इसलिए वेब एपीआई 2.2 (जिसे .NET 4.5 की आवश्यकता है) का उपयोग नहीं कर सका। अच्छी तरह से NuUet पैकेज का अर्थ इस खंड को <system.web> अनुभाग के अंतर्गत जोड़ा गया है:

<system.web>
<httpHandlers>
      <add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
    </httpHandlers>
</system.web>

[मैं अच्छी तरह से कहता हूं, क्योंकि आईआईएस के पुराने संस्करणों पर यह हिस्सा आवश्यक है]

इस खंड को हटाने से मुझे HTTP 500.23 से पहले मिल गया !!

सारांश: मैं जेरेमी के दूसरे शब्दों को समझता हूं कि यह समझना महत्वपूर्ण है कि क्यों चीजें "लक्षण को मास्क करने" की बजाय काम क्यों नहीं करतीं। यहां तक ​​कि यदि आपको लक्षण मास्क करना है, तो आप जानते हैं कि आप क्या कर रहे हैं (और क्यों) :-)


जांचें कि क्या आपके आईआईएस प्रमाणीकरण में कोई संघर्ष है या नहीं। यानी आप अज्ञात प्रमाणीकरण और एएसपी.NET प्रतिरूपण सक्षम करते हैं, दोनों त्रुटि भी उत्पन्न कर सकते हैं।


अपने web.config में सुनिश्चित करें कि ये कुंजी मौजूद हैं:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

साथ ही Asp.Net Impresonation = IIS साइट स्वभाव में अक्षम करें की जांच करें


स्थानीय के लिए विधि त्रुटि है


दूसरा विकल्प वह है जिसे आप चाहते हैं।

अपने web.config , सुनिश्चित करें कि ये कुंजी मौजूद हैं:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

मैं इस मुद्दे में भाग गया लेकिन एक अलग फिक्स था। इसमें Control Panel>Administrative Tools>IIS Manager अपडेट करना और मेरी ऐप साइट की प्रबंधित पाइपलाइन को Integrated से Classic







iis-7.5