我有一個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端點參與端口共享?
只是一個想法:添加bindingConfiguration =「netTcpBindingConfig」 的MEX終結? – 2010-11-12 15:30:36
@Torben是的,我試過了。當我這樣做時,mex端點沒有共享問題,但它完全無法生成任何元數據。 – 2010-11-12 15:44:00