gpt4 book ai didi

wcf - 如何强制 net.tcp mex 端点 (mexTcpBinding) 参与端口共享?

转载 作者:行者123 更新时间:2023-12-03 00:11:40 24 4
gpt4 key购买 nike

我有一个作为 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 端点参与端口共享?

最佳答案

两个选项:

  1. 简单的方法:将 mex 点的整个绑定(bind)更改为 netTcpBinding 并让它重用您的绑定(bind)配置。 mexTCPBinding 只是为了方便,并且是可选的。如果它不适合您,请不要使用它。

  2. 困难的方法:您可以修改 mexTCPBinding 以启用共享。我见过的唯一例子是这里的代码:Link

关于wcf - 如何强制 net.tcp mex 端点 (mexTcpBinding) 参与端口共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com