【问题标题】:Hosting Multiple TCP WCF service Endpoints on single Port在单个端口上托管多个 TCP WCF 服务端点
【发布时间】:2011-08-18 21:02:27
【问题描述】:

我在 Windows 服务中托管 3 个 WCF 服务。每个 WCF 服务包含多个端点。现在,我通过不同端口上的 TCP 绑定来托管我的所有端点。 有什么方法可以在同一端口上托管来自不同 wcf 服务的所有这些端点?

【问题讨论】:

    标签: wcf wcf-binding nettcpbinding


    【解决方案1】:

    当然是!您可以使用 Net.TCP 端口共享服务。

    MSDN 上的Net.TCP Port Sharing

    【讨论】:

    • 谢谢约翰。我将对此进行更多探索并做一些示例应用程序。
    • 嗨,约翰,我在我的配置文件中设置了 。但我最终遇到了异常。任何帮助?System.ServiceModel.AddressAlreadyInUseException:IP 端点 0.0.0.0:2324 上已经有一个侦听器。确保您没有尝试在应用程序中多次使用此端点,并且没有其他应用程序在此端点上侦听。 ---> System.Net.Sockets.SocketException: 每个套接字地址(协议/网络)只允许使用一次
    • @Vamsi:嗨。端口共享服务默认使用 808 端口。从您的 net.tcp url 中删除所有端口号,它们应该默认为 808。
    • @谢谢约翰。不走运,我仍然遇到同样的问题。这是我的 2 个服务的 baseAddress 2)。我还启动了 Net Port 共享服务。非常感谢您的帮助。谢谢!
    【解决方案2】:

    出于好奇,我只是调查了一下。我发现的行为看起来很奇怪,我几乎不想把它放在这里。但它在我的情况下有效,所以也许它对你也有同样的效果:

    当我尝试在同一 net.tcp 端口上托管 2 个服务(即 2 个单独的 ServiceHost 实例)时,我得到了 AddressAlreadyInUseException,并且在 netTcpBinding 上为两者设置了 portSharingEnabled="True"。无论是否运行 Net.Tcp 端口共享服务,都会发生这种情况。即使我只启动其中一项服务也会引发异常(我通过netstat 验证了机器上的同一端口上没有其他侦听器,另外,我以提升的权限运行了应用程序)。

    现在,有趣的是,当我设置 PortSharingEnabled = False 时,AddressAlreadyInUseException 没有被抛出,但是这两个服务都在正常工作!再一次,无论是否运行端口共享服务。我什至可以从另一台机器成功连接到这些服务。

    但是,需要注意的是,上述内容仅适用于服务托管在同一进程中的情况!如果我尝试启动正在侦听同一端口但基地址不同的应用程序的另一个实例,它确实会爆炸。但我假设您将这 3 个 WCF 服务托管在同一个 Windows 服务中?

    所以,即使它看起来不正确,我的回答是 disable PortSharingEnabled 并查看它是否适用于同一端口上的不同 BaseAddress(前提是它们都在相同的过程)。

    【讨论】:

    • 您在哪里托管这些服务?在 Windows 服务或 Windows 控制台中或使用“客户端:”WcfTestClient.exe。我尝试在“客户端:”WcfTestClient.exe 上进行相同的测试,但失败了。
    • 我将它们托管在控制台应用程序中,因此这与 Windows 服务相当,因为您正在显式实例化 ServiceHost。
    • @Vamsi 和@ServiceGuy:这些端点上是否启用了元数据交换?如果是这样,请尝试禁用它。 @ServiceGuy,在 MEX 端点上启用端口共享可能会使其按预期运行。
    • @JohnC:删除了 MEX 端点以及 MetadataBehavior,它仍然可以正常工作没有 PortSharingEnabled。或者这不是你想要的?
    • 是的,是的。我相信 Nicholas Allen 博客中的这篇文章解释了意外行为:blogs.msdn.com/b/drnick/archive/2006/08/23/713297.aspx
    【解决方案3】:

    据我所知,您不仅要在配置(或通过代码)上启用端口共享,还必须手动启动 Windows 端口共享服务。

    这就是我(有类似问题)不想使用端口共享的原因,以使其更易于部署,而不必弄乱用户可能知道或不知道的其他事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多