我有一个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