【问题标题】:How to force a net.tcp mex endpoint (mexTcpBinding) to participate in port sharing?如何强制 net.tcp mex 端点 (mexTcpBinding) 参与端口共享?
【发布时间】: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


【解决方案1】:

两种选择:

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

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

【讨论】:

  • 感谢您的回复。我尝试将 mexTcpBinding 更改为 netTcpBinding 但没有骰子。当我这样做时,服务启动并且不会抱怨共享问题(这很酷),但完全无法响应 mex 请求(这很不酷)。如果我使用我不知道的 netTcpBinding,大概还有其他需要配置的东西?
  • @Damian 你解决过这个问题吗?奇怪的是,我们在我的本地机器上看到了这个问题,但在生产中却没有
猜你喜欢
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多