【发布时间】:2010-11-12 15:22:20
【问题描述】:
我有一个作为 Windows 服务托管的 WCF 服务。我们希望在同一地址启用一个 mex 端点(但带有“/mex”后缀)。我一直在尝试使用以下配置执行此操作(未成功):
<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。我可以通过像这样调整 mex 端点来解决这个问题:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
这意味着 mex 端点现在拥有自己的专有端口。这样做的缺点是任何其他想要公开 mex 端点的服务也需要一个唯一的端口用于它的 mex 端点。这使得查找 mex 端点时变得非常不可预测。
有没有办法强制 mex 端点参与端口共享?
【问题讨论】:
-
只是一个想法:将 bindingConfiguration="netTcpBindingConfig" 添加到 mex 端点?
-
@Torben 是的,我试过了。当我这样做时,mex 端点没有共享问题,但它确实完全无法生成任何元数据。
标签: wcf net.tcp mex-bindings