2011-04-15 11 views
13

सेट करता हूं तो मैं मेटाडेटा प्रकाशित अवधारणा से उलझन में हूं।यदि मैं HttpGetEnabled = false

तो एक WCF सेवा कॉन्फ़िग फ़ाइल में मैं लिखा था:

<serviceMetadata httpGetEnabled="false"/> 

कोई फर्क नहीं पड़ता कि यह सही या गलत है। जब मैंने "सेवा जोड़ें संदर्भ ..." का उपयोग कर क्लाइंट एप्लिकेशन में सेवा संदर्भ देने का प्रयास किया और "डिस्कवर" पर क्लिक किया, तो मैं सेवा संदर्भ पुनर्प्राप्त करने में सक्षम हूं।

लेकिन जब निम्नांकित दो पंक्तियों को हटा दिया: -

<endpoint address="mex" binding="mexBasicHttpBinding" contract="IMetadataExchange"/> 

<serviceMetadata httpGetEnabled="false"/> 

अब जब कि जब मैं का उपयोग कर एक क्लाइंट अनुप्रयोग में संदर्भ देने के लिए करने की कोशिश की "सेवा संदर्भ जोड़ें ...." और "डिस्कवर" क्लिक करने के बाद, मैं नहीं सेवा संदर्भ पुनर्प्राप्त करने में सक्षम है ....

अब कोई मुझे बता सकता है कि इसका क्या अर्थ है। इसे सेट करने के बाद क्यों गलत है यह अभी भी संदर्भ सेट करने की अनुमति दे रहा है। और उन पंक्तियों को हटाने के बाद यह संदर्भ सेट करने की अनुमति नहीं दे रहा है।

-अनिल

उत्तर

21

एमएक्स और डब्लूएसडीएल संभावित ग्राहकों को आपकी सेवा की संरचना के बारे में बताने के लिए दो अलग-अलग योजनाएं हैं। इसलिए आप या तो "मेटाडाटा एक्सचेंज प्रारूप" (एमईएक्स) या "web service description language" (डब्लूएसडीएल) में अपनी सेवा अनुबंध को सार्वजनिक रूप से चुन सकते हैं - बाद में HTTP (HTTP) के माध्यम से पहुंचा जा सकता है।

इस प्रकार प्रॉक्सी उत्पन्न करने के लिए, आपको मेटा डेटा जानकारी की आवश्यकता है। जब आप सेवा मेटाडेटा-लाइन को हटाते हैं तो आप कहते हैं कि आप डब्लूएसडीएल प्रारूप में मेटा डेटा प्रदान नहीं कर रहे हैं।

लेकिन एमएक्स में आपके मेटाडेटा को प्रकाशित करने से पहले लाइन अभी भी सक्रिय है, इस प्रकार आप उन मेटाडेटा से प्रॉक्सी उत्पन्न कर सकते हैं।

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

जैसा कि जोएल सी सही ढंग से इंगित करता है, बाइंडिंग एक (एन लगभग) ऑर्थोगोनल अवधारणा है। चाहे आप मूल HTTP, ws HTTP, नेट नामित पाइप या क्रिस्टल गेंदों के माध्यम से आपसे बात करने की अनुमति दें, आप अपनी सेवाओं को प्रकाशित करने के तरीके पर निर्भर नहीं हैं।

WCF security guidance project और/या एमएस "practises and patterns" for WCF security गहन अंतर्दृष्टि प्रदान कर सकता है।

+0

धन्यवाद यह बहुत सारे संदेहों को मंजूरी दे दी .... –

+0

मेरी खुशी। :) – Cornelius

+0

मुझे यकीन नहीं है कि यह प्रश्न का उत्तर देता है: _ "अगर मैं HttpGetEnabled = false सेट करता हूं तो क्या होता है?" _, क्या यह है? –

5

आप एक सेवा संदर्भ है, जो मेटाडाटा एक्सचेंज (MEX) के आधार पर एक प्रॉक्सी उत्पन्न करता है जोड़ रहे हैं। HttpGetEnabled कॉन्फ़िगरेशन आपको एक HTTP एंडपॉइंट सेट करने देता है जो WSDL का उपयोग करके गैर-मैक्स प्रॉक्सी उत्पन्न करने की अनुमति देगा, जैसे विरासत .NET webservice प्रॉक्सी। वे अलग-अलग सेटिंग्स द्वारा नियंत्रित विभिन्न प्रोटोकॉल हैं। मेरा मानना ​​है कि यदि आपके पास <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/SampleService?wsdl"/> है तो आप .NET 2.0 से एक वेब सेवा संदर्भ जोड़ सकते हैं, जिसे आप <serviceMetadata httpGetEnabled="false"/> कॉन्फ़िगरेशन का उपयोग करने में असमर्थ होंगे।

+0

इसका मतलब है कि "httpGetEnabled = true" निर्दिष्ट करके मेरी डब्ल्यूसीएफ सेवा को webservice के रूप में भी उपभोग किया जाएगा। यदि हां, तो "BasicHttp बाइंडिंग" का उपयोग क्या है? चूंकि बेसिकहट्प बाइंडिंग का उपयोग करने का मुख्य लाभ आपकी डब्ल्यूसीएफ सेवा को पुराने संस्करण में उपलब्ध कराने के लिए है और इसे webservice के रूप में उपभोग किया जा सकता है (मुझे पिछली संगतता के रूप में जाना जाता है, मुझे यकीन नहीं है), क्या आप कृपया हमें बताएं कि वास्तव में क्या "HttpGetEnabled" और "BasicHttp बाइंडिंग" के बीच अंतर/सह-संबंध।यदि वे सह-संबंधित हैं तो हमें "WttHGetEnabled = true" लाइन का उपयोग क्यों करना चाहिए, जब मैं "WsHttp बाइंडिंग" का उपयोग कर रहा हूं –

+2

आपकी डब्ल्यूसीएफ सेवा अन्य प्रक्रियाओं (इसके एंडपॉइंट बाइंडिंग) के साथ कैसे संचार करती है और यह कैसे मेटाडेटा को अपने बारे में बताती है (इसकी मेटाडेटा कॉन्फ़िगरेशन) एक दूसरे से स्वतंत्र हैं। यदि आप एसओएपी वेब सेवा के रूप में सेवा तक पहुंचने की योजना बना रहे हैं ('WsHttp बाइंडिंग' के साथ कॉन्फ़िगर किए गए एंडपॉइंट का उपयोग करके) को मेटाडेटा को डब्लूएसडीएल (' httpGetEnabled = "true" 'और' httpGetUrl') का उपयोग करके समझना समझ में आता है, या तो सेटिंग कर सकते हैं दूसरे के बिना इस्तेमाल किया जाना चाहिए। –

+0

तो फिर निम्नांकित दो पंक्तियों को हटाने के बाद: - <बाध्यकारी endpoint पता = "MEX" = "mexBasicHttpBinding" अनुबंध = "IMetadataExchange" /> क्यों यह अनुमति नहीं दे रहा मुझे क्लाइंट एप्लिकेशन में संदर्भ देना है। (मैं इसे webservice के रूप में उपयोग नहीं करना चाहता) मुझे लगता है कि सेवा मेटाडेटा कहीं डब्लूसीएफ संचार के साथ अंतर-संबंधित है। मेटाडेटा क्लाइंट के बिना संचार स्थापित नहीं कर सकता है। क्लाइंट एप्लिकेशन को मेटाडाटा के साथ संभवतः संचार स्थापित करने के लिए सेवा के प्रकार और अन्य घटक को अवश्य पता होना चाहिए, केवल –

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