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


401

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

मुझे मिलने वाला IIS त्रुटि संदेश है

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

तथा

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

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

चीजें जो आप आज़मा सकते हैं:

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

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

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

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

जवाबों:


782

2 nd विकल्प वह है जिसे आप चाहते हैं।

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

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

10
यह वास्तव में आपके ऐप की सुरक्षा को प्रभावित नहीं करना चाहिए। यह चेतावनी को बंद कर देता है जो कहता है कि आपके पास कुछ कॉन्फ़िगरेशन मान हैं जिनका उपयोग नहीं किया जाएगा।
डेविड

19
यह वास्तव में अत्यधिक ध्वनि सलाह नहीं है यदि आपके पास ऐसी सेटिंग्स हैं जिनका उपयोग नहीं किया जाएगा तो आपको उन्हें हटा देना चाहिए।
सिपाही

33
@ सिफ, असहमत है कि यह ध्वनि सलाह नहीं है। बहुत सारे नुगेट इंस्टॉलेशन (उदाहरण के लिए, डॉटलेस) उन खंडों में प्रविष्टियाँ जोड़ेंगे जो एकीकृत मोड पर लागू होते हैं, और गैर-एकीकृत मोड के लिए उस सेटिंग की नकल भी करते हैं। यह कहा जाता है पोर्टेबिलिटी और काम करने के लिए आपके विन्यास की अनुमति देता है , भले ही आप IIS7 का उपयोग कर रहे हैं कि क्या / एकीकृत या क्लासिक की। इस सत्यापन सेटिंग को छोड़ने का एकमात्र कारण यह trueहै कि आप अपने प्रशिक्षण पहियों को छोड़ सकते हैं और जब भी आप एक ऐसी सेटिंग जोड़ते हैं जो एकीकृत मोड में काम नहीं करेगी तो आप पर IIS yell है। यह अनुभवहीन के लिए है, लेकिन रास्ते में हो जाता है।
कर्क वूल

5
इस तरह का विन्यास कष्टप्रद है। @एमएस: एक बेहतर तरीका है।
yonexbat

3
उन लोगों के लिए जो मास्किंग लक्षणों पर त्रुटियों को ठीक करना पसंद करते हैं, मैंने एक वैकल्पिक उत्तर पोस्ट किया है। NuGet पैकेज के बारे में, हम अभी भी IIS 6 / क्लासिक को क्यों लक्षित कर रहे हैं?
जेरेमी कुक

104

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

पृष्ठभूमि:

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

तो, क्या अंतर है? महत्वपूर्ण अंतर यह है कि ASP.NET IIS के साथ कैसे इंटरैक्ट करता है।

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

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

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

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

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

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

* बेशक वहाँ वाइरसकार्ड मैपिंग जैसे incantations के माध्यम से IIS 6 / Classic से ASP.NET पाइपलाइन में सभी प्रकार की अजीब चीजें प्राप्त करने के तरीके हैं , यदि आप उस तरह की चीज पसंद करते हैं।


+1 केवल समाधान आपकी समस्या का उत्तर नहीं है, बल्कि ऐसे समाधान के साथ है जो पूर्ण उत्तर है। यह क्या है और हमें इसे बदलने की आवश्यकता क्यों है, @ जेरेमी कुक जवाब द्वारा दिए गए उत्तर के ये प्रश्न।
रिकिन पटेल

इस स्पष्टीकरण ने मुझे एकीकृत मोड में IIS 7.5 में होस्ट की गई छोटी परीक्षण साइट के लिए समस्या को हल करने के लिए प्रेरित किया। जब मैंने एक नया MVC प्रोजेक्ट बनाया, तो इसने मेरे Web.config में httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule जोड़ा। ऐसा इसलिए है क्योंकि मैंने एक नया ASP.NET वेब एपिलेशन प्रोजेक्ट बनाते समय "प्रोजेक्ट के लिए एप्लिकेशन इनसाइट्स जोड़ें" विकल्प को छोड़ दिया। जब मैंने HTTPModule को Web.config से हटा दिया, तो साइट ने त्रुटि के बिना काम किया। ValidateIntegratedModeConfiguration को गलत कार्य पर सेट करना, लेकिन यह केवल एक बैंडेड दृष्टिकोण था।
आईकोड

2
ASP.NET सेटिंग का पता चला है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होता है। यह अभी तक एक और बेकार Microsoft त्रुटि संदेश है। ASP.net में हजारों सेटिंग्स हैं, लेकिन Microsoft ने त्रुटि पाठ में त्रुटि पैदा करने वाले को शामिल करने के लिए नहीं सोचा था। एमएस को इंजीनियरों के बजाय बाज़ारियों द्वारा चलाया जा रहा है ताकि जल्द ही किसी भी समय चीजों में सुधार की उम्मीद न करें। :-(
पॉल मैकार्थी

35

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

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

2
मुझे लगता है कि HttpModules system.web में संपत्ति ASP 3.5 या उससे पहले के लिए है। ASP। 4 या इसके बाद के संस्करण के लिए उपयोग में system.webserver
तीनों Cheung

1
@HoyCheung वास्तव में एकीकृत या क्लासिक पाइपलाइन का उपयोग करने की बात करता है, न कि .Net के किस संस्करण का, जो तय करता है कि क्या system.web / httpModules या system.webServer / मॉड्यूल का उपयोग किया जाए।
पौली Paulsterø

29

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


3
सहमत - यह सिर्फ त्रुटि को छिपाने के बजाय बेहतर विकल्प है! सुनिश्चित करें कि आप सही ऐप पूल का उपयोग कर रहे हैं
स्वोमबल

1
मैं दृश्य स्टूडियो 2012 का उपयोग कर रहा हूं, मैं ऐप पूल को क्लासिक में कैसे बदल सकता हूं।

10
यदि आप एकीकृत पाइपलाइन में उपलब्ध सभी नई सुविधाओं का उपयोग करना चाहते हैं तो यह एक अच्छा समाधान नहीं है। यह एक समस्या के कारण 4.0 से .NET 2.0 में वापस जाने जैसा है।
ट्रेवर डे कोएकोक

IIS प्रबंधक में ऐसा करने के लिए, Application Poolsपेड़ पर बाईं ओर जाएं, उस पूल पर डबल-क्लिक करें जिसे आप बदलना चाहते हैं, और पाइपलाइन मोड चुनें।
स्टीव स्मिथ

8

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


5

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

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

साथ ही Asp.Net इम्प्रेसोनेशन की जांच करें = IIS साइट ऑटिचेशन में अक्षम करें


3

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

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

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

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

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

इस खंड को हटाने से मुझे HTTP 500.23 अतीत मिला है !!

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


धन्यवाद। मैंने एट्री कंट्रोलर ऐड-ऑन नुगेट पैकेज सहित एट्रीब्यूटिंग को जोड़ा, और आपने वेब से संकेतित अनुभाग को हटाकर समस्या को हल कर दिया। हालाँकि, मैं थोड़ा चिंतित हूँ क्योंकि मेरा MVC वेब ऐप पहले से ही .NET फ्रेमवर्क 4.5 का उपयोग कर रहा था।
रॉबर्ट ओस्क्लर

2
@RobertOschler यदि आप .NET 4.5 पर हैं, तो आपके पास पहले से ही AFAIK में निर्मित विशेषता मार्ग है - आपको इस Nuetet की आवश्यकता नहीं होनी चाहिए?
सुधांशु मिश्रा

धन्यवाद और बकवास। आज कुछ घंटों के लिए एटग्रेटिंग पैकेज चल रहा है जो NuGet चल रहा है। मैंने इसे निकाला और इसे बनाने के लिए जोड़े गए सभी कोड "फिक्स" को काम करने के लिए जोड़ा, और GET के लिए वेब एपीआई 2 रूट () विशेषता को प्रतिस्थापित किया। बढ़िया काम किया। हमें वास्तव में इन दिनों इन सभी पैकेजों की सहायता के लिए एक विशेषज्ञ प्रणाली की आवश्यकता है।
रोबर्ट ओस्लर

2

यह मेरे लिए काम किया:

  1. मूल रूप से बनाई गई साइट हटाएं।
  2. IIS में साइट को फिर से बनाएँ
  3. साफ समाधान
  4. समाधान बनाएँ

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


0

मेरे मामले में मैं बिन फ़ोल्डर में dll याद कर रहा था जिसे web.config फ़ाइल में संदर्भित किया गया था। इसलिए जांचें कि क्या आप web.config में किसी सेटिंग का उपयोग कर रहे हैं, लेकिन वास्तव में dll नहीं है।

धन्यवाद


0

इसे हल करने में मुझे कुछ घंटे लगे क्योंकि इस त्रुटि के बारे में मुझे यहाँ मिली सभी सेटिंग्स समान थीं लेकिन फिर भी यह काम नहीं किया। समस्या यह थी कि मेरे पास मेरी वेब सेवा में एक फ़ोल्डर था जिसमें से फ़ाइल को WinCE डिवाइस पर भेजा जाना चाहिए, उस फ़ोल्डर को Classic.NetAppPool के साथ एक एप्लिकेशन में बदलने के बाद यह काम करना शुरू कर दिया।


0

नीचे दिए गए चरण ने मेरी समस्या हल कर दी:

CMDव्यवस्थापक विशेषाधिकार के साथ खुला प्रॉम्प्ट।

Daud : iisreset.

उम्मीद है की यह मदद करेगा।


-1

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

छवि


7
जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं, इस सेटिंग को न बदलें। यह लगभग सही उत्तर नहीं है।
निकग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.