2011-10-31 16 views
8

मैं सिर्फ डब्ल्यूसीएफ सीख रहा हूं और एक बहुत ही बुनियादी बात समझ नहीं पा रहा हूं।डब्ल्यूसीएफ एंडपॉइंट सापेक्ष पता

मैं एक डब्ल्यूसीएफ सेवा बना रहा हूं जिसे मैं आईआईएस में होस्ट करना चाहता हूं जैसे कि वेब एप्लिकेशन जैसे http://myhost/myapp/ और सब कुछ।

मैं वी.एस. में WCF सेवा परियोजना बना रहा हूं, मैं यह वर्णन एक *.svc फ़ाइल मिल गया है, तो मैं एक साधारण endpoint यह करने के लिए इस तरह परिभाषित करते हैं:

<endpoint address="" 
      binding="basicHttpBinding" 
      contract="wcf_service_auth.IPshService" /> 

तो मैं एक तरह से इस सेवा को प्रकाशित आईआईएस वेब एप्लिकेशन वर्चुअल निर्देशिका में, मान लें कि इसका नाम psh_pub है, इसलिए मैं url http://localhost/psh_pub/pshservice.svc/ के माध्यम से सेवा तक पहुंच सकता हूं। यह मुझे डब्ल्यूसीएफ बधाई पृष्ठ दिखाता है और मुझे डब्लूएसडीएल का एक लिंक देता है, जो मुझे सही wsdl विवरण देता है।

यह ठीक है।

अगला चरण - मैं एक एमएक्स एंडपॉइंट जोड़ना चाहता हूं। मैं config में जोड़ें:

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

वह बहुत ठीक है, अंत बिंदु का पता http://localhost/psh_pub/pshservice.svc/mex पर पहुँचा जा सकता है और WcfTestClient.exe मुझे उस यूआरएल से सही config देता है।

यहां समस्या आती है।

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

<endpoint address="" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

और अब मैं मान लें कि मेरी सेवा यूआरएल net.tcp://localhost:808/psh_pub/pshservice.svc के माध्यम से सुलभ होनी चाहिए। लेकिन ऐसा नहीं है। और हर "कैसे-करें" और वेब पर मैनुअल बताता है कि मैं उस तरह कॉन्फ़िग फ़ाइल में पूरा पता होना चाहिए:

<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

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

तो मुख्य सवाल है:

वहाँ WCF में किसी भी तरह से इसके लिए संपूर्ण url निर्दिष्ट किए बिना एक आईआईएस की मेजबानी की WCF सेवा के एक net.tcp (या https) endpoint निर्दिष्ट करने के लिए है?

उत्तर

7

आपको अपने net.tcp सेवा अंतराल के लिए आधार पता परिभाषित करने में सक्षम होना चाहिए:

<service name="YourServiceName"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/psh_pub/" /> 
     </baseAddresses> 
    </host> 

तो फिर आप अपने वास्तविक अंतिम बिंदुओं में रिश्तेदार पते का उपयोग करने में सक्षम होना चाहिए:

<endpoint name="Tcp01" 
      address="pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 
</service> 
+0

मुझे नहीं पता कि मैंने अभी क्या किया है, लेकिन मुझे खाली "पता" पैरामीटर के साथ एक काम कर रहा net.tcp endpoint मिला है। वैसे भी मदद के लिए धन्यवाद। – pushist1y

4

डब्ल्यूसीएफ फ़ाइल-कम सक्रियण (.Net 4।0) आप relativeAddress विशेषता का उपयोग कर एक रिश्तेदार आभासी पथ के अंतर्गत पंजीकृत कर सकते हैं: वेब अनुप्रयोग के आधार पते पर

<system.serviceModel> 
    <serviceHostingEnvironment> 
    <serviceActivations> 
     <add relativeAddress="relative-virtual-path/yourservice.svc" 
      service="YourServiceImpl" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

रिश्तेदार

इसके बारे में

इस कड़ी में बात करती है: http://msdn.microsoft.com/en-us/library/ee354381.aspx

+0

फ़ाइल-कम सक्रियण मुझे .svc फ़ाइल से छुटकारा पाने के देता है, लेकिन मैं नहीं देख सकते हैं कि यह कैसे करने के लिए मदद कर सकते हैं net.tcp endpoint के लिए पूर्ण होस्ट पता निर्दिष्ट करने से बचें। क्या मुझे कुछ याद आती है? – pushist1y

+0

@ pushist1y सेवा सक्रियताओं के तहत सापेक्ष एड्रेस नामक एक विशेषता है जो आपको अपनी सेवा तक पहुंचने के लिए एक सापेक्ष वर्चुअल पथ निर्दिष्ट करने की अनुमति देती है। क्या यह आपके लिए काम नहीं करता है? – Craig

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