2011-08-04 15 views
23

इसलिए मैं सेवा अंतराल और मेजबान आधार पता के लिए उलझन में एक लेटल हूं। उन सभी उदाहरणों में मैंने अब तक चलने की आवश्यकता है, वे आवश्यक बाइंडिंग के साथ एंडपॉइंट्स सेट करने के बारे में बात करते हैं और आप आमतौर पर उन अंतराल परडब्ल्यूसीएफ सेवा एंडपॉइंट्स बनाम होस्ट बेस पता

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

<configuration> 
     <system.web> 
     <compilation debug="true" /> 
     </system.web> 
     <!-- When deploying the service library project, the content of the config file must be added to the host's 
     app.config file. System.Configuration does not support config files for libraries. --> 
     <system.serviceModel> 
     <services> 
      <service name="HostService.EvalService"> 
      <endpoint address="http://localhost:8080/basic" 
       binding="basicHttpBinding" contract="HostService.IEvalService" /> 
      <endpoint address="http://localhost:8080/ws" 
       binding="wsHttpBinding" contract="HostService.IEvalService" /> 
      <endpoint address="mex" binding="mexHttpBinding" 
       name="mex" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
       <add baseAddress="http://localhost:8080/EvalsService" /> 
       </baseAddresses> 
      </host> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
      <behavior name=""> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="false" /> 
      </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     </system.serviceModel> 
    </configuration> 

क्या कोई मुझे यह समझा सकता है?

उत्तर

32

जब आप आईआईएस पर डब्ल्यूसीएफ सेवा होस्ट करते हैं, तो मूल पता केवल .svc फ़ाइल का यूआरएल हो सकता है। यदि आप कोई अन्य आधार पता निर्दिष्ट करते हैं, तो इसे अनदेखा कर दिया जाता है। आप अभी भी अपने एंडपॉइंट्स के लिए सापेक्ष यूआरआई निर्दिष्ट कर सकते हैं, जैसे address="basic" या address = "ws"। फिर इस मामले में एंडपॉइंट पर पता <URL to the .svc file>/basic और <URL to the .svc file>/ws बन जाता है।

+0

क्या मुझे अभी भी एंडपॉइंट्स पर नेविगेट करने में सक्षम होना चाहिए? फिलहाल मैं –

+4

नहीं कर सकता, आप ब्राउज़र में एंडपॉइंट्स पर नेविगेट करने में सक्षम नहीं होंगे लेकिन अंतिम बिंदु अभी भी सक्रिय हैं और क्लाइंट को ठीक से कनेक्ट करने में सक्षम होना चाहिए। –

+12

मुझे कोई सुराग नहीं है कि क्यों एमएस आपके कुछ बुलेट्स को उनके फ्रीकिन दस्तावेज में नहीं बताता है। – PositiveGuy

6

जब आप आधार पते का उपयोग, आप अपने अंतिम बिंदुओं के लिए पूर्ण यूआरआई प्रदान करने के लिए, उदाहरण के लिए, आप अंत बिंदु विन्यास खंड में address="basic" उपयोग कर सकते हैं की जरूरत नहीं है, इसका मतलब है कि अंत बिंदु के लिए पता http://localhost:8080/EvalsService/basic है।

+0

क्या कोड के माध्यम से एंडपॉइंट के सापेक्ष पते को सेट करना संभव है? – FrenkyB

15

जब आप एंडपॉइंट पता खाली छोड़ देते हैं, तो इसका मतलब है कि एंडपॉइंट बस इसके एंडपॉइंट पते के लिए संबंधित आधार पते का उपयोग करेगा। वैकल्पिक रूप से, आप आधार पते को अपनी सेवा के पूर्ण पथ के रूप में कॉन्फ़िगर कर सकते हैं, या बेहतर दृष्टिकोण के रूप में, अपने एंडपॉइंट्स के सापेक्ष पते लिख सकते हैं।

जब आप आईआईएस पर अपनी सेवाएं होस्ट करते हैं, तो सर्विस बेस पता आईएसआई आभासी निर्देशिका द्वारा .svc फ़ाइल के साथ निर्धारित किया जाता है।

मान लीजिए कि आपके पास calc.svc नाम की एक फ़ाइल है और आप इसे वर्चुअल निर्देशिका में रखते हैं जो 'http: // localhost: 8080/calcservice' से मेल खाती है। इस सेवा के लिए मूल पता 'http: // localhost: 8080/calcservice/calc.svc' होगा।

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

नीचे कॉन्फ़िगरेशन पर विचार करें; (': // स्थानीय होस्ट: 8080/calcservice/calc.svc http') के बाद से मैं अंत बिंदु का पता खाली छोड़ दिया

<configuration> 
    <system.serviceModel> 
     <services> 
      <service name="CalculatorService"> 
       <!-- base address determined by IIS virtual directory --> 
       <endpoint binding="basicHttpBinding" contract="ISimpleMath"/> 
       <endpoint address="secure" binding="wsHttpBinding" contract="ISimpleMath"/> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
     ... 

... पहले endpoint की पता आधार पते के समान हो जाता है। दूसरे एंडपॉइंट का पता "सुरक्षित" के साथ जुड़े मूल पते का संयोजन बन जाता है, जैसे: 'http: // localhost: 8080/calcservice/calc.svc/safe'। और "मैक्स" एंडपॉइंट का पता 'http: // localhost: 8080/calcservice/calc.svc/mex' है। यह कुछ लोगों के लिए थोड़ा अजीब लग सकता है क्योंकि पते के सापेक्ष हिस्से को फ़ाइल नाम के दाईं ओर जोड़ा गया है, लेकिन आपको याद रखना होगा कि calc.svc आधार पते का हिस्सा है, इसलिए इसे इस तरह से काम करना है।

हालांकि आप "../mex" या ब्राउज़र के माध्यम से "../secure" URL को नेविगेट नहीं कर सकते, वे वास्तव में सक्रिय हैं और ग्राहकों को इन पतों का उपभोग कर सकते हैं।

ग्राहक व्यवहार

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

जानकारी से ऊपर ज्यादातर हारून Skonnard उत्तम article MSDN पर से निकाला। मैं दृढ़ता से सुझाव देता हूं कि आप डब्ल्यूसीएफ एड्रेसिंग के पीछे मूलभूत सिद्धांतों को प्राप्त करने के लिए इसे पढ़ लें।

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