我有一個可通過http和net.pipe訪問的服務。它被託管在IIS 7(Server 2008)中。我可能在同一臺機器上爲幾個客戶託管此服務的不同實例,因此HTTP使用虛擬主機名等進行設置。這一切都工作正常。在IIS中託管WCF net.pipe綁定時控制命名管道的名稱
我想我會做的淨命名管道結合類似 - 使用某種形式 客戶在命名管道的基址「virtualhostname」的,所以讓我 不同net.pipe甕訪問不同的客戶實例(我知道 net.pipe名稱是URN的不是URL的,所以它們可以基本上是任意的,但我認爲我會遵循與HTTP地址類似的模式)。
這裏是我的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>
然而, 訪問該服務的WSDL時 - 基址爲net.pipe似乎 由IIS被忽略。相反,我得到機器的真實主機名,以及似乎完全由IIS格式化的net.pipe地址URN。
<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名的方式無法控制,我將無法在機器上的多個客戶服務實例區分 。有沒有人有任何線索可以在IIS環境中控制網絡命名管道綁定URN?
(我做了很多的託管獨立net.pipe的測試期間(即新的ServiceHost()) ,所以我知道我的net.pipe綁定IIS做工作以外,也允許控制 在確切的命名管道URN使用)
如果名稱不能在IIS內控制 - 沒有人有任何經驗與 託管和訪問多個單獨的net.pipe服務實例在同一 機?
您知道net.pipe綁定只能「在機器上」工作,例如,即使它們託管在IIS中,您也無法訪問其他計算機上的這些計算機.... – 2009-11-27 06:19:22
當您在IIS中託管時,您並不真正選擇服務地址 - 它始終是'http:// machinename [:port ]/virtualdir/yourservice.svc' - 我懷疑這同樣適用於net.pipe地址 - 如果託管在IIS中,您無法控制其命名...... – 2009-11-27 06:20:55
是的,HTTP端點用於在機外訪問,我希望能夠使用net.pipe端點來實現一些有限的(但希望更快)的機器訪問。 當我在IIS中託管我的HTTP端點時,我確實會選擇服務地址(在某個級別),因爲我指定了要使用的域。這讓我有多個IIS站點通過不同的網址 即http://customer1.com/admin/Admin.svc 和 http://customer2.com/admin/Admin.svc 如果我不能每次訪問不要選擇net.pipe的基地址,我怎樣才能在IIS中爲不同的客戶託管多個net.pipe綁定? – 2009-11-27 08:00:01