2012-10-25 12 views
6

के लिए एएसपी.NET मॉड्यूल को फायरिंग बंद नहीं कर सकता है मेरे पास एक एएसपी.नेट एमवीसी अनुप्रयोग में एक मॉड्यूल है। मॉड्यूल ठीक काम कर रहा है, लेकिन यह स्थिर सामग्री भले ही मेरे पास है सहित फ़ाइल के हर प्रकार के लिए फायरिंग कर रहा है:स्थैतिक सामग्री

<modules runAllManagedModulesForAllRequests="false"> 
    <add name="MyModule" .../> 
</modules> 

मॉड्यूल हुक AcquireRequestState और PostRequestHandlerExecute घटनाओं और दोनों स्थिर सामग्री फायरिंग (.htm, .css दिखाने के लिए,। पीएनजी आदि)।

मैं इस इंप्रेशन के तहत था कि रनअनमैनजेड मॉड्यूलफोरएलआरक्वेट्स = "झूठी" मॉड्यूल को गैर-ASP.NET सामग्री पर फायरिंग से रखना चाहिए।

स्पष्ट करने के लिए:

मैं कर सकते हैं सेट पूर्व शर्त = "managedHandler" इस तरह:

<add name="MyModule" type="MyApp.MyModule" preCondition="managedHandler" /> 

और केवल प्रबंधित अनुरोध आग करने के लिए अपने मॉड्यूल मिलता है।

हालांकि, मैं समझने की कोशिश कर रहा हूं कि सामान्य रूप से आईआईएस पाइपलाइन क्यों हर अनुरोध के लिए प्रबंधित मॉड्यूल हिट फायरिंग कर रही है। मुझे लगता है कि यह पुराने संस्करणों में ठीक काम करने के लिए प्रयुक्त होता है, जहां तक ​​रन नहीं किया जाता है जब तक सभी प्रबंधित नहीं किया जाता है। मॉड्यूलफोरअलरक्वेट = "सत्य" यह एएसपी.NET मॉड्यूल में अप्रबंधित सामग्री को फायर नहीं कर रहा था।

एकीकृत पाइपलाइन मोड के साथ विंडोज 8 64 बिट मोड पर आईआईएस 8 पर चल रहा है।

अद्यतन:

कुछ और अनुसंधान के बाद यह पता चला है कि निम्न सत्य है:

  • अगर runAllManagedModulesForAllRequests = "true" सभी मॉड्यूल - अपने पूर्व शर्त की परवाह किए बिना सभी अनुरोधों पर आग लगाने विशेषता । यह भी Application_XXXX घटनाओं के लिए सच HttpApplication पर लागू
  • runAllManagedModulesForAllRequests = "false" मार मॉड्यूल से अप्रबंधित अनुरोध रखते हुए, जब तक पूर्व शर्त = "managedHandler"
  • runAllManagedModulesForAllRequests सेट किया गया है की कोई प्रभाव नहीं है = "false" को प्रभावित करता है Application_XXXX घटनाएं, जिससे उन घटनाओं को केवल प्रबंधित अनुरोधों पर आग लगती है। IOW, Application_XXXX बर्ताव करता है जैसे कि 'मॉड्यूल' कार्यान्वयन एक पूर्व शर्त = "managedHandler"

था इस बारे में अधिक विस्तृत जानकारी के लिए मैं एक ब्लॉग प्रविष्टि पोस्ट: http://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78

+0

आप जांच कर सकता है कि StaticFileModule मॉड्यूल के तहत पंजीकृत है? % Windir% \ System32 \ inetsrv \ static.dll – pbz

+0

को केवल सैनिटी चेक के लिए इंगित करना चाहिए, क्या आप नोड के पूर्ण पूर्वजों के साथ अपडेट कर सकते हैं? के अंतर्गत होना चाहिए। जैसे मैंने कहा, सैनिटी चेक। :) –

+0

इसके अलावा, अगर मुझे सही याद है, तो आपको मॉड्यूल के लिए प्रीकंडिशन = "प्रबंधित हैंडलर" की आवश्यकता है -> – pbz

उत्तर

7

IIS7 माइक्रोसॉफ्ट में का एक नया तरीका पेश किया प्रबंधित (.NET) कोड का उपयोग कर मॉड्यूल और हैंडलर विकसित करना, न केवल मूल कोड। समस्या प्रबंधित और देशी कोड के बीच एक अनुरोध को स्विच कर रहा है बहुत महंगा है, इसलिए माइक्रोसॉफ्ट ने preCondition="managedHandler" पेश किया। यह मॉड्यूल को केवल प्रबंधित सामग्री अनुरोधों (.aspx, .asmx, ...) के लिए उपलब्ध है, इसलिए आईआईएस स्थिर सामग्री के लिए इसे फायर करने से बचाता है।

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

अंत में, runAllManagedModulesForAllRequests="true"preCondition="managedHandler" को ओवरराइड करने के लिए उपयोग किया जाता है, इसलिए उन सभी को निकाल दिया जाता है।

अधिक जानकारी पर उपलब्ध है:
http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Precondition

+0

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