在单个端口上托管多个TCP WCF服务端点

时间:2011-05-04 20:41:05

标签: wcf wcf-binding nettcpbinding

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

3 个答案:

答案 0 :(得分:3)

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

MSDN上的

Net.TCP Port Sharing

答案 1 :(得分:3)

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

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

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

然而,要做的一个重要注意事项是,只有在相同的过程中托管服务时,上述内容才适用!如果我尝试启动另一个正在同一端口上侦听的应用程序实例,但它会有一个不同的基地址。但我假设你在同一个Windows服务中托管这3个WCF服务?

所以,即使它似乎不对,我的回答是禁用 PortSharingEnabled并查看它是否适用于同一端口上的不同BaseAddresses(前提是它们都是在同一个过程中。)

答案 2 :(得分:1)

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

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