2010-11-12 78 views
11

我有一個WCF服務作爲Windows服務託管。我們希望在相同的地址啓用mex端點(但使用'/ mex'後綴)。我一直在努力做這(失敗)使用以下配置:如何強制net.tcp mex端點(mexTcpBinding)參與端口共享?

<system.serviceModel> 

    <services> 
    <service 
     name="MyCompany.MyService" 
     behaviorConfiguration="defaultServiceBehavior"> 

     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost"/> 
     </baseAddresses> 
     </host> 

     <endpoint 
     address="MyService" 
     binding="netTcpBinding" 
     contract="MyCompany.IMyService" 
     bindingConfiguration="netTcpBindingConfig" 
     /> 

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

    </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="defaultServiceBehavior"> 
     <serviceMetadata /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 

    <bindings> 
    <netTcpBinding> 
     <binding name="netTcpBindingConfig" portSharingEnabled="true" /> 
    </netTcpBinding> 
    </bindings> 

</system.serviceModel> 

當它運行時,服務主機引發AddressAlreadyInUseException抱怨「已經有上IP端點0.0.0.0:808偵聽器」。這實際上對我來說很有意義,因爲端口共享服務已經打開了該端口,以便服務MyService端點以及請求在該機器上共享該端口的任何其他服務。

如此看來,MEX終結點希望端口808 EXLUSIVE訪問我可以解決此通過調整MEX終結,像這樣:

<endpoint 
    address="net.tcp://localhost:818/MyService/mex" 
    binding="mexTcpBinding" 
    contract="IMetadataExchange" 
    /> 

這意味着MEX終結,現在有自己的專用港口。其缺點是,任何想要公開mex端點的其他服務都需要爲其mex端點提供一個唯一的端口。這使得在尋找mex端點時非常難以預測。

有沒有辦法強制mex端點參與端口共享?

+0

只是一個想法:添加bindingConfiguration =「netTcpBindingConfig」 的MEX終結? – 2010-11-12 15:30:36

+0

@Torben是的,我試過了。當我這樣做時,mex端點沒有共享問題,但它完全無法生成任何元數據。 – 2010-11-12 15:44:00

回答

8

兩個選項:

  1. 最簡單的辦法:改變整個的MEX點NetTcpBinding的結合,並讓它重用你bindingConfiguration。 mexTCPBinding只是爲了方便,並且是可選的。如果它不適合你,不要使用它。

  2. 難辦法:您可以修改mexTCPBinding以啓用共享。我見過的唯一的例子是在代碼在這裏:http://blogs.msdn.com/b/drnick/archive/2006/08/23/713297.aspx

+0

感謝您的回覆。我試着改變mexTcpBinding netTcpBinding但沒有骰子。當我這樣做時,服務啓動,並沒有抱怨共享問題(這很酷),但完全無法響應mex請求(這是不酷的)。據推測,如果我使用netTcpBinding,我還沒有意識到需要配置其他東西? – 2010-11-15 09:42:30

+0

@Damian你有沒有解決過這個問題?奇怪的是,我們在本地機器上看到了這個問題,但沒有在生產中 – 2012-03-08 15:23:41

+1

簡單的方法適用於我(選項1)。 – 2012-04-11 23:31:08