2013-10-11 13 views
5

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

  • मैं दृश्य स्टूडियो 2012 के एक उदाहरण में WCF परियोजना, एक विशिष्ट पोर्ट पर सर्वर के रूप में आईआईएस एक्सप्रेस 8 का उपयोग कर चल रहा हूँ: यहाँ परिदृश्य है।
  • मैं विजुअल स्टूडियो 2012 के एक अन्य उदाहरण में क्लाइंट प्रोजेक्ट चला रहा हूं, सर्वर के रूप में आईआईएस एक्सप्रेस 8 का उपयोग कर रहा हूं। यह प्रोजेक्ट अन्य परियोजनाओं में सेवाओं का उपभोग करने के लिए AJAX का उपयोग करता है।

जब मैं आईई में क्लाइंट प्रोजेक्ट चलाता हूं तो कोई समस्या नहीं है क्योंकि आईई प्रीफलाइट विकल्प अनुरोध नहीं भेजता है। जब मैं इसे क्रोम में चलाता हूं, हालांकि प्रीफलाइट विकल्प अनुरोध 405 विधि को अनुमति नहीं देता है और क्रोम सेवा पर छोड़ देता है। क्रोम के पिछले संस्करण केवल त्रुटि को अनदेखा करेंगे और वास्तविक POST अनुरोध (या प्राप्त करें, जो कुछ भी ...) के साथ जारी रखें, लेकिन बाद के संस्करण पिकियर दिखाई देते हैं।

मैंने इसे एक तैनात डब्ल्यूसीएफ परियोजना के साथ भी चलाया है और आईआईएस में हैंडलर मैपिंग्स सूची के शीर्ष पर OPTIONSVerbHandler को स्थानांतरित करके इसे हल किया है।

मुझे यह इंगित करना चाहिए कि मैं सबसे उदार वेब.कॉन्फिग सेटिंग्स का उपयोग कर रहा हूं, मैं सीओआरएस को अनुमति देने की कोशिश करने के बारे में सोच सकता हूं। उदाहरण के लिए मैं WCF परियोजना के कॉन्फ़िगरेशन में यह है:

<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="*" /> 
    <add name="X-Powered-By" value="*" /> 
    </customHeaders> 
</httpProtocol> 

परवाह किए बिना, किसी भी ग्राहक WCF परियोजना के लिए पार मूल अनुरोध कोड से चल रहा 405 त्रुटि के साथ विफल।

सीओआरएस सक्षम करने के लिए या तो डब्ल्यूसीएफ परियोजना या आईआईएस एक्सप्रेस 8 को स्थापित करने में कोई मदद?

धन्यवाद!

+0

क्या आप आरईएसटी के लिए डब्ल्यूसीएफ सेवाओं का उपयोग कर रहे हैं? आप वास्तव में 'OptionsVerbHandler' को हटाना चाहते हैं और स्वयं को संभाल सकते हैं। वैकल्पिक रूप से ... आप 'JSONP' का खुलासा करना चाहेंगे। मैं अनुशंसा करता हूं कि आप 'एएसपी.Net वेब-एपीआई' का उपयोग करें। – Aron

उत्तर

1

उत्तर यह है कि डब्ल्यूसीएफ को सीओआरएस प्रीफलाइट संदेशों को स्वीकार करने के लिए कॉन्फ़िगर करने की आवश्यकता आईआईएस सर्वर से कुछ लेना देना नहीं है; बल्कि डब्लूसीएफ परियोजना को विकल्प अनुरोध के साथ HTTP अनुरोध को संभालने के लिए कॉन्फ़िगर करने की आवश्यकता है।

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

+0

कभी-कभी उत्तर खोजने की कुंजी व्यवहार्य उत्तरों के दायरे को सीमित करना है। इससे मदद मिली। धन्यवाद –

3
  • मूल्य के रूप में केवल एक्सेस-कंट्रोल-अनुमति-उत्पत्ति के लिए मान्य है। दूसरों के लिए आपको स्पष्ट होना चाहिए।

पहुंच-नियंत्रण-अनुमति दें-तरीके:: मिलता है, डाल, पोस्ट, हटाएँ

या वैकल्पिक रूप से:

पहुंच-नियंत्रण-अनुमति दें-तरीके: PUT, DELETE

उदाहरण के लिए क्योंकि कल्पना कहती है कि प्राप्त करें और पोस्ट अंतर्निहित हैं।

+0

धन्यवाद। अफसोस की बात है, वेब बदल रहा है।इस पर कॉन्फ़िगरेशन प्रविष्टि: <नाम जोड़ें = "एक्सेस-कंट्रोल-अनुमति-विधि" मान = "विकल्प, पोस्ट" /> का कोई प्रभाव नहीं पड़ता है। –

12

आप डब्ल्यूसीएफ के लिए कॉर्स सक्षम कर सकते हैं, और यह एक बार जब आप जानते हैं तो यह काफी सरल हो सकता है।

अधिक सामान्य प्रश्न "cors on IIS" पर DavidG प्रतिक्रिया, प्रतिक्रिया है जो वास्तव में क्या एक बुनियादी समाधान के लिए आवश्यक है के पास है से विस्तार से चर्चा करते:

  • पहले, नेट संचालकों से पहले निष्पादित करने के लिए OPTIONSVerbHandler कॉन्फ़िगर करें।

    1. आईआईएस कंसोल में, "हैंडलर मैपिंग्स" का चयन करें। (इसे सर्वर स्तर या साइट स्तर पर करें। साइट स्तर पर यह आपकी साइट के लिए सभी हैंडलर को फिर से परिभाषित करेगा और उसके बाद सर्वर स्तर पर किए गए किसी भी बदलाव को अनदेखा कर देगा। और निश्चित रूप से सर्वर स्तर पर, यदि उन्हें उनकी आवश्यकता हो तो यह अन्य साइटों को तोड़ सकता है विकल्प क्रिया का अपना हैंडलिंग।)
    2. एक्शन फलक में, "ऑर्डर ऑर्डर देखें ..." चुनें। OPTIONSVerbHandler खोजें, और इसे ऊपर ले जाएं (बहुत सारे क्लिक ...)।

    आप इसे <system.webServer><handlers> के तहत सभी हैंडलर को फिर से परिभाषित करके web.config में भी कर सकते हैं। (<clear> फिर उन्हें <add ...> वापस, यह क्या आप के लिए आईआईएस सांत्वना करता है। वैसे, इस हैंडलर पर अनुमति "पढ़ें"। के लिए पूछने की कोई जरूरत नहीं है),

  • दूसरा के लिए कस्टम http हेडर कॉन्फ़िगर अपने जैसे CORS जरूरत है,:

    <system.webServer> 
        <httpProtocol> 
        <customHeaders> 
         <add name="Access-Control-Allow-Origin" value="*"/> 
         <add name="Access-Control-Allow-Headers" value="Content-Type"/> 
         <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS"/> 
        </customHeaders> 
        </httpProtocol> 
    </system.webServer> 
    

    यह उदाहरण उन्हें साइट/एप्लिकेशन/निर्देशिका जिसमें web.config है पर सभी अनुरोधों को करने के लिए सभी प्रतिक्रियाओं के लिए निर्धारित किया है। यदि आप उन्हें कुछ यूआरएल तक सीमित करना चाहते हैं, तो इसे <location> टैग में रखें।
    आप आईआईएस कंसोल में उन कस्टम हेडर भी जोड़ सकते हैं।

यह एक बुनियादी समाधान के बाद से यह CORS हेडर भेजेगा, भले अनुरोध है जो यह की आवश्यकता नहीं है, हो सकता है अप्रत्याशित उपयोगों के लिए आपके आवेदन को खोलने पर है। लेकिन डब्ल्यूसीएफ के साथ, यह सबसे सरल होने जैसा लगता है।

एमवीसी या वेबपीआई के साथ, हम कोड के द्वारा OPTIONS क्रिया और कोर हेडर को संभाल सकते हैं (या तो "मैन्युअल" या वेबपी के नवीनतम संस्करण में अंतर्निहित समर्थन के साथ)।

+0

मुझे एक ही समस्या है, मैंने उपरोक्त चरणों का पालन किया है। लेकिन यह वांछित परिणाम नहीं मिला था। शीर्षलेखों ने अनुरोध किया और हेडर्स प्रतिक्रिया शब्द में शब्द को शब्द के साथ अनुमति देते हैं लेकिन यह अभी भी विफल रहता है। कृपया –

+0

@ सिवासेंथिल की सहायता करें, अगर विकल्प के लिए विकल्प अनुरोध की प्रतिक्रिया स्थिति आपके मामले में 200 है, तो शायद यह आईआईएस/डब्ल्यूसीएफ परेशानी नहीं है। –

+0

@ फ्र्रेड्रिक, दुर्भाग्य से विकल्प अनुरोध 400 के साथ विफल रहता है - खराब अनुरोध स्थिति। –

0

मैं बस उल्लेख करना चाहता था, कि इस लेखन के रूप में, मुझे विश्वास नहीं है कि वेब ब्राउज़र Access-Control-Allow-Methods या Access-Control-Allow-Headers के लिए वाइल्डकार्ड मान का समर्थन करते हैं, भले ही यह कल्पना में हो।

युक्ति:

https://www.w3.org/TR/cors/
https://tools.ietf.org/html/rfc2616#section-4.2

देखें संगतता नोट्स (आसानी से पढ़ने):

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers

ऊपर, बेहतर समाधान के एवज में, इसका मतलब है कि आप स्पष्ट रूप से समर्थक है प्रत्येक हेडर या विधि को आप अनुमति देना चाहते हैं।

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