2012-03-20 17 views
26

मैं डब्ल्यूसीएफ के साथ एक समस्या को हल करने की कोशिश कर रहा था। मैं डब्ल्यूसीएफ के लिए बहुत नया हूं इसलिए मुझे यकीन नहीं था कि वास्तव में क्या चल रहा था।AspNetCompatibilityRequirementsMode.Allowed इस त्रुटि को ठीक क्यों करता है?

मैं विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं और नई वेब साइट-> डब्ल्यूसीएफ सेवा करता हूं। मैंने अपनी सेवा और कॉन्फ़िगरेशन फ़ाइल में बनाई है, अगर मैं aspNetCompatibilityEnabled="true" सेट करता हूं, तो मुझे अपने वेब ब्राउज़र के माध्यम से सेवा में जाने पर यह त्रुटि मिल जाएगी।

The service cannot be activated because it does not support ASP.NET compatibility. 
ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config 
or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode 
setting as 'Allowed' or 'Required'. 

मुझे समझ में नहीं आता कि इसका क्या अर्थ है। aspNetCompatibilityEnabled="true" इस त्रुटि का कारण बनता है जब [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] इसे हल करता है।

मेरे लिए, वे ध्वनि की तरह लगते हैं। इसके अलावा, उस विशेषता के बिना चांदी की रोशनी मेरे डब्ल्यूसीएफ तरीकों को कॉल करने में सक्षम नहीं थी। ऐसा क्यों है?

यहाँ मेरी कॉन्फ़िग फ़ाइल यदि आवश्यक है:

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <customErrors mode="Off"/> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="LargeBuffer" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" /> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
     <service name="Services.Exporter"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeBuffer" 
      contract="Services.IExporter" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment 
     multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

तो मेरे सवाल है, क्यों संगतता जोड़ने करता विशेषता है कि ठीक? इसके अलावा, चांदी की रोशनी के लिए यह क्यों जरूरी था?

उत्तर

36

जब आप अपनी कॉन्फ़िगरेशन फ़ाइल में aspNetCompatibilityEnabled से true सेट करते हैं, तो आप यह बता रहे हैं कि आपकी सेवाएं एएसपी.नेट पाइपलाइन में भाग लेंगी; इसलिए एएसपी.नेट सत्र जैसी चीजें उपलब्ध हैं। यदि यह मामला है, तो आपको अपनी सेवाओं को उचित रूप से सजाने की ज़रूरत है, क्योंकि एएसपी.NET संगतता मोड डिफ़ॉल्ट रूप से गलत पर सेट है।

तो Allowed के RequirementsMode के साथ अपनी सेवा कार्यान्वयन सजाने से, आप एक खुश बीच मैदान है कि मूल रूप से कहते हैं आपकी सेवा परवाह नहीं करता क्या aspNetCompatibility मोड (सही या गलत) है बताते हुए कर रहे हैं। यदि आपका RequirementsModeRequired है, तो आपको कॉन्फ़िगर aspNetCompatibilityEnabled सत्य पर सेट करने की आवश्यकता है; विपरीत है यदि आपका RequirementsModeNotAllowed पर सेट है।

(आप की अनुमति की RequirementsMode की खुश बीच मैदान के साथ जाना है, तो आप अपनी सेवा कार्यान्वयन में जाँच कर सकते हैं aspNetCompatibilityEnabled स्थिर ServiceHostingEnvironment.AspNetCompatibilityEnabled संपत्ति की जाँच करके सक्षम है या नहीं।)

सिल्वरलाइट पर निर्भरता होना आवश्यक है एएसपी.नेट पाइपलाइन (मैं सिल्वरलाइट डेवलपर नहीं हूं), यही कारण है कि आपको सिल्वरलाइट ऐप्स द्वारा कॉल करने के लिए अपनी कॉन्फ़िगरेशन मोड को अपनी कॉन्फ़िगरेशन मोड और अपनी सेवाओं पर सक्षम करने की आवश्यकता है।

इस here पर एमएसडीएन के दस्तावेज़ देखें। यह जानने की बात यह है कि यदि आपको एएसपी.नेट पाइपलाइन उपहारों की आवश्यकता नहीं है, तो आपको अपनी सेवाओं को सजाने की आवश्यकता नहीं है या अपनी कॉन्फ़िगरेशन में एएसपीनेट कॉम्पैबिलिटीएबल सेटिंग सेट करने की आवश्यकता नहीं है (वे डिफ़ॉल्ट रूप से बंद हो जाते हैं)।

+0

प्रश्न, यदि यह सही है तो यह उचित सजावट क्या होगी? – Justin

+0

यह इस बात पर निर्भर करता है कि आपकी सेवा को एएसपी.नेट पाइपलाइन के साथ उपलब्ध वस्तुओं की आवश्यकता है या नहीं। यदि आप वास्तव में परवाह नहीं करते हैं, तो आप इसे 'आवश्यकताएँ मोड' अनुमति देंगे। यदि आप उन घटकों (सत्र की तरह) पर भरोसा करते हैं, तो आपको इसे 'आवश्यकताएँ मोड। आवश्यक' पर सेट करना चाहिए। –

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