2010-08-21 14 views
8

मैं नेट 4 में एक WCF बाकी (उर्फ WebHttp) सेवा बनाया है, माइक्रोसॉफ्ट के WCF बाकी सेवा खाका 40. मैं आईआईएस 6. मेंWCF बाकी सेवा IIS में होस्ट की डाल का समर्थन नहीं करता और DELETE

होस्टिंग सेवा कर रहा हूँ का उपयोग कर

सेवा टेम्पलेट ग्लोबल.एक्सएक्स में रूटटेबल का उपयोग "क्लीन" यूआरएल बनाने के तरीके के रूप में करता है जिसमें उनमें ".svc" शामिल नहीं है।

: http: उदाहरण के लिए // स्थानीय होस्ट/उड़ानों/878

प्राप्त और पोस्ट इस URL के खिलाफ अच्छा काम है, लेकिन HTTP 501 में डाल दिया और परिणाम हटाएँ, "कार्यान्वित नहीं"।

अगर मैं इस तरह एक साधारण .svc फ़ाइल बनाने:

: http: // localhost/flightsservice.svc/878

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%> 

तो मैं डाल दिया और इस URL के खिलाफ DELETE उपयोग कर सकते हैं

क्या किसी को पता है कि ऊपर "साफ" यूआरएल के खिलाफ काम करने के लिए PUT प्राप्त करना संभव है? ऐसा लगता है कि आईआईएस को इस अनुमति देने के लिए कॉन्फ़िगर करने का कोई तरीका नहीं है क्योंकि सेटिंग्स को कॉन्फ़िगर करने के लिए कोई फ़ाइल एक्सटेंशन नहीं है, और मैं वैश्विक रूप से PUT को अनुमति देना और हटाना नहीं चाहता हूं।

+0

देखें कि किस प्रकार एक समान समस्या आईआईएस 7.5 [यहां] (http://stackoverflow.com/questions/3745015/webdav पर हल किया गया था -troubles-restfull-WCF-वेब-सेवा के लिए)। समाधान सुरुचिपूर्ण है। – lmsasu

उत्तर

4

मैंने कुछ समय में आईआईएस 6 के साथ काम नहीं किया है (और मैंने इसे इंस्टॉल नहीं किया है, इसलिए मैं यहां मेमोरी छोड़ रहा हूं), लेकिन मुझे आईआईएस 6 में विस्तारित यूआरएल रूट करने के लिए आईआईएस 6 के साथ कुछ लागू करना पड़ा।

आप IIS प्रबंधक हैकिंग द्वारा फ़ोल्डर के आधार पर फ़ोल्डर पर वाइल्डकार्ड स्क्रिप्ट मैपिंग सक्षम कर सकते हैं। यह blog post है जो मैंने पीछा किया और यह वास्तव में अच्छी तरह से काम करता है (और यह link थोड़ा और पृष्ठभूमि प्रदान करता है)। यह वास्तव में प्रबंधक में एक बग है, आईआईएस स्वयं नहीं (कम से कम यही वह है जो मैं खुद बताता हूं)।

क्या आप अपनी साइट के उप-फ़ोल्डर में अपनी सेवाओं का संदर्भ ले सकते हैं (उदा। http://localhost/services/flight/878)? यदि ऐसा है, और यदि आप ऊपर आईआईएस प्रबंधक हैक लागू करते हैं, तो मुझे लगता है कि आप उस निर्देशिका के लिए सभी HTTP क्रियाएं सक्षम कर सकते हैं। दोबारा, मैं स्मृति से बाहर जा रहा हूं (और हमने केवल जीईटी और पोस्ट लागू किए हैं, इसलिए मैंने पुट्स और डिलीट्स से निपट नहीं लिया), इसलिए मुझे उम्मीद है कि मुझे यह अधिकार मिल रहा है।

मुझे बताएं कि आपको अधिक जानकारी चाहिए या यदि मेरी याददाश्त फिसल रही है। :) आशा है कि ये आपकी मदद करेगा!

+0

धन्यवाद, यह काम किया! चूंकि मेरे आईआईएस एप्लिकेशन में केवल सेवाएं होंगी, इसलिए मैंने आपके द्वारा पोस्ट किए गए दूसरे लिंक में वर्णित पूरे एप्लिकेशन के लिए वाइल्डकार्ड मैपिंग सेट की है। बहुत बहुत धन्यवाद! माइक –

+0

उन "अनियंत्रित" सुविधाओं से प्यार होना चाहिए। :) खुशी है कि यह आपके लिए कारगर रहा। –

2

यदि आपका वेब एप्लिकेशन एकाधिक देव/उत्पादन वातावरण में तैनात हो रहा है, तो सबसे अच्छा तरीका web.config स्तर पर WebDAV को अक्षम करने लगता है। ऐसा करने के लिए, WebDAVModule और नीचे दिए गए उदाहरण में के रूप में WebDAV प्रबंधक को निकाल:

<system.webserver> 
    <modules> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
    <remove name="WebDAV" /> 
    </handlers> 
</system.webserver> 
+1

सवाल यह था कि एप्लिकेशन स्तर पर आईआईएस में PUT और DELETE को कैसे सक्षम किया जाए। –

+1

हां, इससे आईआईएस को वैश्विक एप्लिकेशन को सक्षम किए बिना, इसे वर्तमान एप्लिकेशन के लिए अनुमति देने की अनुमति होगी, क्योंकि मूल पोस्टर ने पूछा था। यदि आप WebDAV मॉड्यूल और हैंडलर को नहीं हटाते हैं, तो PUT और DELETE अनुरोध उनके द्वारा अपहृत हो जाएंगे और काम नहीं करेंगे। – DanilF

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