2011-09-02 17 views
20

मैं सोच रहा था कि क्यों मैं इस घोषणा करने के लिए की जरूरत है:मुझे मैक्स एंडपॉइंट और httpGetEnable दोनों की आवश्यकता क्यों है?

<serviceMetadata httpGetEnabled="true" /> 

है और यह भी इस

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

अगर मैं केवल का उपयोग पहले एक - यह काम कर रहा है ब्राउज़र के माध्यम सेतो मुझे दूसरे की आवश्यकता क्यों है?

क्या आप मुझे उदाहरण दे सकते हैं कृपया मुझे बाद में उपयोग करना होगा?

+2

अच्छा सवाल।+1 – Lijo

उत्तर

18

आप

  • करने की जरूरत है सब पर मेटाडाटा प्रकाशित करने के लिए (कि serviceMetadata व्यवहार है) सेवा को सक्षम - लेकिन आपhttpGetEnabled की जरूरत नहीं है - कि वैकल्पिक

  • एक जगह है (एंडपॉइंट) जहां एक पूछताछ करने वाला ग्राहक उस सेवा मेटाडाटा को पकड़ सकता है - यह मेक्स एंडपॉइंट है। यह मेटाडेटा के मशीन-पठनीय प्रारूप के लिए है - एक क्लाइंट बनाने के लिए विजुअल स्टूडियो या svcutil का उपयोग कर सकते हैं। यह मानव उपभोग के

+0

लेकिन वह मैक्स एंडपॉइंट के बिना भी ऐसा कर सकता है, जिसका अर्थ है wsdl ... तो? –

+0

अगर मैं "मैक्स एंडॉइंट" छोड़ देता हूं - "svcutil" इसे पकड़ने में सक्षम नहीं होगा? –

+0

@ mid787: आपको सही लगता है - ' 'जगह पर, आप (और' svcutil') भी किसी भी MEX एंडपॉइंट के बिना URL से WSDL प्राप्त कर सकते हैं - तो शायद आप वास्तव में इसकी आवश्यकता नहीं है, जब तक आपकी सेवा सार्वजनिक रूप से डब्लूएसडीएल –

7

यह निम्न स्थिति में उपयोगी हो रहा है के लिए लक्षित नहीं है ...

<system.serviceModel> 
    <services> 
     <service name="WCFService.Service" behaviorConfiguration="ServiceBehavior"> 
      <host> 
       <baseAddresses> 
        <add baseAddress="net.tcp://localhost:8080/WCFService"/> 
       </baseAddresses> 
      </host> 

      <!-- Net.Tcp EndPoints--> 
      <endpoint address="" 
       binding="netTcpBinding" 
       contract="WCFService.IService" /> 

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

      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="ServiceBehavior"> 
        <serviceMetadata httpGetEnabled="false" /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
</system.serviceModel> 

कोई HTTP परिभाषित अंतिमबिंदुओं रहे हैं और आप निम्न तरीकों से आपकी सेवा के लिए मिल सकता है। ..

- Browser: http://localhost/WCFService/Service.svc  
- svcutil.exe net.tcp://localhost:8080/WCFService/Service.svc/mex 

यदि आप एमएक्स एंडपॉइंट पर टिप्पणी करते हैं तो न तो काम करेगा।

आप क्यों मेटा डेटा अभी भी

के रूप में ब्राउज़र में देखा जा सकता है एक) मैं एक HTTP endpoint और ख) मैं विशेष रूप से निर्धारित किया है नहीं है ...

<serviceMetadata httpGetEnabled="false" /> 

इस का कारण यह है कि वेबसाइट के लिए उन्नत सेटिंग में मैं उन्नत सेटिंग के अंतर्गत सक्षम प्रोटोकॉल के लिए परिभाषित निम्नलिखित पड़ा है ...

http,net.tcp

यदि आप http हटाते हैं तो ब्राउज़र में मेटाडेटा नहीं देखा जा सकता है। ऐसा लगता है कि यह इस परिदृश्य में है, net.tcp केवल वेबसाइट सक्षम है, जिसे आपको मेक्सिको एंडपॉइंट की आवश्यकता है।

1

एमईएक्स एंडपॉइंट्स विशेष अंतराल हैं जो ग्राहकों को अनुरोध प्राप्त करने के बजाय एसओएपी संदेशों का उपयोग करके सेवा के मेटाडेटा प्राप्त करने की अनुमति देते हैं। आप एमईएक्स एंडपॉइंट बना सकते हैं जिसे http, https, tcp, और यहां तक ​​कि नामित पाइप के माध्यम से एक्सेस किया जा सकता है।

एमएक्स एंडपॉइंट के गेटमैटाडाटा ऑपरेशन को कॉल करते समय आपको प्राप्त होने वाली प्रतिक्रिया में डब्लूएसडीएल की सामग्री और उससे जुड़े सभी एक्सएसडी फाइलों की सामग्री शामिल होगी।

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