【发布时间】:2011-08-18 21:02:27
【问题描述】:
我在 Windows 服务中托管 3 个 WCF 服务。每个 WCF 服务包含多个端点。现在,我通过不同端口上的 TCP 绑定来托管我的所有端点。 有什么方法可以在同一端口上托管来自不同 wcf 服务的所有这些端点?
【问题讨论】:
标签: wcf wcf-binding nettcpbinding
我在 Windows 服务中托管 3 个 WCF 服务。每个 WCF 服务包含多个端点。现在,我通过不同端口上的 TCP 绑定来托管我的所有端点。 有什么方法可以在同一端口上托管来自不同 wcf 服务的所有这些端点?
【问题讨论】:
标签: wcf wcf-binding nettcpbinding
当然是!您可以使用 Net.TCP 端口共享服务。
MSDN 上的Net.TCP Port Sharing
【讨论】:
出于好奇,我只是调查了一下。我发现的行为看起来很奇怪,我几乎不想把它放在这里。但它在我的情况下有效,所以也许它对你也有同样的效果:
当我尝试在同一 net.tcp 端口上托管 2 个服务(即 2 个单独的 ServiceHost 实例)时,我得到了 AddressAlreadyInUseException,并且在 netTcpBinding 上为两者设置了 portSharingEnabled="True"。无论是否运行 Net.Tcp 端口共享服务,都会发生这种情况。即使我只启动其中一项服务也会引发异常(我通过netstat 验证了机器上的同一端口上没有其他侦听器,另外,我以提升的权限运行了应用程序)。
现在,有趣的是,当我设置 PortSharingEnabled = False 时,AddressAlreadyInUseException 没有被抛出,但是这两个服务都在正常工作!再一次,无论是否运行端口共享服务。我什至可以从另一台机器成功连接到这些服务。
但是,需要注意的是,上述内容仅适用于服务托管在同一进程中的情况!如果我尝试启动正在侦听同一端口但基地址不同的应用程序的另一个实例,它确实会爆炸。但我假设您将这 3 个 WCF 服务托管在同一个 Windows 服务中?
所以,即使它看起来不正确,我的回答是 disable PortSharingEnabled 并查看它是否适用于同一端口上的不同 BaseAddress(前提是它们都在相同的过程)。
【讨论】:
PortSharingEnabled。或者这不是你想要的?
据我所知,您不仅要在配置(或通过代码)上启用端口共享,还必须手动启动 Windows 端口共享服务。
这就是我(有类似问题)不想使用端口共享的原因,以使其更易于部署,而不必弄乱用户可能知道或不知道的其他事情。
【讨论】: