我在Windows服务中托管3个WCF服务。每个WCF服务包含多个端点。现在,我通过TCP绑定在不同的端口上托管我的所有端点。 有没有办法在同一个端口上托管来自不同wcf服务的所有这些端点?
答案 0 :(得分:3)
当然可以!您可以使用Net.TCP端口共享服务。
MSDN上的答案 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端口共享服务。
这就是为什么我(有类似问题)不想使用端口共享,使部署更容易而不必弄乱用户可能知道或不知道的其他事情的原因。