2009-11-27 22 views
6

में डब्ल्यूसीएफ net.pipe बाध्यकारी होस्ट करते समय नामित पाइप के नाम को नियंत्रित करते हुए मेरे पास http और net.pipe के माध्यम से एक सेवा सुलभ है। यह आईआईएस 7 (सर्वर 2008) में होस्ट किया जा रहा है। मैं एक ही मशीन पर कई ग्राहकों के लिए इस सेवा के विभिन्न उदाहरणों की मेजबानी कर सकता हूं और इसलिए HTTP वर्चुअल होस्टनाम आदि के साथ सेटअप है। यह सब ठीक काम कर रहा है।आईआईएस

मैंने सोचा कि मैं शुद्ध नामित पाइप बाध्यकारी के लिए इसी तरह करना होगा - नामित पाइप आधार पते में ग्राहकों की virtualhostname 'के कुछ फार्म का उपयोग करते हुए, इसलिए मुझे अलग net.pipe कलश के साथ विभिन्न ग्राहक उदाहरणों का उपयोग करने की अनुमति देता है (मुझे लगता है कि net.pipe नाम यूआरएन यूआरएल नहीं हैं इसलिए वे अनिवार्य रूप से मनमानी हो सकते हैं लेकिन मैंने सोचा कि मैं HTTP पते के समान पैटर्न का पालन करूंगा)। net.pipe के लिए आधार का पता लगता है आईआईएस द्वारा ध्यान नहीं दिया जा करने के लिए -

यहाँ मेरी web.config

<service name="Administration" behaviorConfiguration="AdministrationBehavior"> 
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="normalWsBinding" contract="IAdministration" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="normalNetNamedPipeBinding" contract="IAdministration" /> 
    <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://virtualhostname.com/service" /> 
     <add baseAddress="net.pipe://virtualhostname.com/administration/service" /> 
     </baseAddresses> 
    </host> 
</service> 

हालांकि, जब सेवा के लिए डबल्यूएसडीएल तक पहुँचने है। इसके बजाय मुझे मशीन का असली होस्टनाम मिलता है, और net.pipe पता यूआरएन जो पूरी तरह से आईआईएस द्वारा स्वरूपित किया गया प्रतीत होता है।

<wsdl:port name="NetNamedPipeBinding_IAdministration" binding="tns:NetNamedPipeBinding_IAdministration"> 
    <soap12:address location="net.pipe://realhostname/service/Administration.svc"/> 
    <wsa10:EndpointReference> 
     <wsa10:Address>net.pipe://realhostname.com/service/Administration.svc</wsa10:Address> 
     <Identity> 
      <Spn>host/realhostname.com</Spn> 
     </Identity> 
    </wsa10:EndpointReference> 
</wsdl:port> 
रास्ता net.pipe नाम बनते हैं पर कोई नियंत्रण नहीं के साथ

, मैं मशीन पर एकाधिक ग्राहक सेवा उदाहरणों के बीच भेदभाव करने में सक्षम नहीं होगा। क्या किसी के पास कोई संकेत है कि कैसे नेट नामित पाइप बाध्यकारी यूआरएन आईआईएस पर्यावरण के भीतर नियंत्रित किया जा सकता है?

(मैं परीक्षण के दौरान स्टैंडअलोन net.pipe की मेजबानी की एक बहुत कुछ कर (यानी नई ServiceHost()) तो मैं जानता हूँ कि मेरे net.pipe बाइंडिंग आईआईएस के बाहर काम करते हैं, और सही नामित पाइप पर नियंत्रण अनुमति नहीं URN प्रयुक्त)

नाम आईआईएस के भीतर नियंत्रित नहीं किया जा सकता है - किसी को भी करता है होस्टिंग और एक ही मशीन पर एकाधिक अलग net.pipe सेवा उदाहरणों तक पहुँचने के साथ किसी भी अनुभव है?

+0

आप जानते हैं कि net.pipe बाइंडिंग केवल "मशीन पर" काम कर रहे हैं, जैसे कि आप भले ही वे जब IIS में होस्टिंग, तुम सच में आपकी सेवा पते का चयन करने के नहीं मिलता है आईआईएस .... –

+0

में होस्ट कर रहे हैं कुछ अन्य मशीन से उन तक पहुँच सकते हैं नहीं, - यह हमेशा 'http है: // machinename [: बंदरगाह ]/virtualdir/yourservice.svc' - मुझे लगता है एक ही पतों net.pipe पर लागू होता है - आप अगर आईआईएस में होस्ट उनके नामकरण नियंत्रित करने के लिए नहीं मिलता है .... –

+0

हाँ, HTTP अंतिमबिंदुओं ऑफ मशीन के उपयोग के लिए कर रहे हैं, और मैं कुछ सीमित (लेकिन उम्मीद है कि तेजी से) मशीन एक्सेस पर net.pipe एंडपॉइंट्स का उपयोग करने की उम्मीद कर रहा था। जब मैं आईआईएस में मेरी HTTP अंतिम बिंदुओं की मेजबानी, मैं तथापि, क्योंकि मैं डोमेन मैं उपयोग करना चाहते हैं निर्दिष्ट (कुछ स्तर पर) सेवा का पता करने के लिए चुना है मिलता है। यह मैं कई आईआईएस साइटों अलग यूआरएल यानी http://customer1.com/admin/Admin.svc और http://customer2.com/admin/Admin.svc अगर मैं कर सकते हैं 'के माध्यम से एक सुलभ है की सुविधा देता है net.pipe के लिए मेरे मूल पते का चयन नहीं करते हैं, आईआईएस में विभिन्न ग्राहकों के लिए होस्ट किए गए एकाधिक नेटपाइप बाइंडिंग कैसे हो सकते हैं? –

उत्तर

2

यह एक पुरानी सवाल है, लेकिन मैं के बाद से मैं भी इस के लिए एक जवाब की जरूरत है मैं अपने जवाब जोड़ना होगा (और शायद वहाँ दूसरों सारे हैं लगा जो इसे भी चाहिए)।

आईआईएस-होस्टेड डब्ल्यूसीएफ सेवा का मूल पता आईआईएस द्वारा नियंत्रित किया जाता है और इसे web.config में ओवरराइड नहीं किया जा सकता है। इसके बजाए, आप जिस साइट पर अपनी सेवा होस्ट कर रहे हैं, उसके लिए आईआईएस साइट बाध्यकारी जानकारी अपडेट करके आधार पते को नियंत्रित कर सकते हैं।

प्रलेखन मैं ऑनलाइन का उपयोग कर पता चलता है पाया * net.pipe के लिए बाध्यकारी विन्यास के रूप में से अधिकांश। लेकिन यदि आप इसके बजाय बाध्यकारी कॉन्फ़िगरेशन मान के रूप में "virtualsite.com" का उपयोग करते हैं, तो आपके net.pipe endpoint का मूल पता मशीन नाम के बजाय "virtualsite.com" होगा।

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='virtualhostname.com'] 

एक टिप्पणी के बारे में HostnameComparisonMode, यह MSDN के अनुसार IIS में कोई प्रभाव नहीं है:

यहाँ appcmd का उपयोग कर सही net.pipe बंधन के साथ आईआईएस में एक साइट कॉन्फ़िगर करने के लिए एक उदाहरण है

ये मान जब इंटरनेट सूचना सेवा (आईआईएस) या Windows प्रक्रिया सक्रियण सेवा के अंदर इस्तेमाल किया कोई असर नहीं (था) की मेजबानी पर्यावरण। उन मामलों में, डब्ल्यूसीएफ डब्ल्यूसीएफ सेवाओं की मेजबानी करने वाली आईआईएस वेब साइट द्वारा प्रदान किए गए होस्टनाम तुलना मोड का उपयोग करता है।

इसके बजाय, आप तंत्र मैं ऊपर वर्णित का उपयोग करना होगा। मैंने यह जांच करके यह पता लगाया कि आईआईएस के लिए HTTP में होस्टनाम बाइंडिंग कैसे काम करती है। दुर्भाग्यवश, मैं अन्य डब्ल्यूसीएफ परिवहन के लिए इस आईआईएस-आधारित परिदृश्य के लिए कोई आधिकारिक दस्तावेज नहीं ढूंढ पाया।

+0

धन्यवाद क्रिस। हल होने के लिए मेरी ज़रूरत पूरी होने के बाद से लंबी है लेकिन यह अच्छी जानकारी की तरह दिखती है! –

0

ऐसा प्रतीत होता है कि यूआरआई का मेजबान नाम भाग अनदेखा कर दिया गया है और चैनल बाइंडिंग के होस्टनाम कॉमपरिसन मोड के आधार पर कार्यान्वयन द्वारा प्रतिस्थापित किया गया है। आप HostnameComparisonMode मान दर्शाता है कि होस्ट नाम सेवा जब मिलान होने पर किया जाएगा, चाहे वह "सटीक" सेवा के विन्यास के माध्यम से करने के लिए परिवर्तित करने का प्रयास कर सकते हैं ...

http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.hostnamecomparisonmode.aspx

NetNamedPipeBinding.HostnameComparisonMode यूआरआई। डिफ़ॉल्ट मान StrongWildcard() है, जो मैच में होस्टनाम को अनदेखा करता है।

यहाँ विन्यास वाक्य रचना देखें: http://msdn.microsoft.com/en-us/library/ms731291.aspx

+0

मुझे यकीन नहीं है कि यह आपके मूल उत्तर के बाद नया है, लेकिन आपके लिंक के अनुसार, होस्टनाम कॉम्परिसन मोड का आईआईएस में कोई प्रभाव नहीं पड़ता है। –