WCF net.tcp 绑定:托管多个服务是不是需要端口共享?
Posted
技术标签:
【中文标题】WCF net.tcp 绑定:托管多个服务是不是需要端口共享?【英文标题】:WCF net.tcp binding: Is port sharing required to host multiple services?WCF net.tcp 绑定:托管多个服务是否需要端口共享? 【发布时间】:2018-11-25 04:06:24 【问题描述】:我们在 IIS(SMSvcHost.exe Event Log ID 8 problem)上托管 WCF 时遇到了一些问题。
IIS 设置如下:
一个 IIS 站点,站点绑定 net.tcp(绑定信息 808:*) 有少量应用程序 每个应用程序都运行自己的应用程序池 每个应用程序托管一个 net.tcp WCF 服务在web.config
文件中,所有的net.tcp 绑定都有portSharingEnabled="true"
。
问题:
如果我更改为portSharingEnabled="false"
,我怀疑设置将停止工作?真的? (我的推理是,多个工作进程无法在不共享端口的情况下处理同一个端口)
如果是这样,是否有让所有应用程序在同一个应用程序池上运行的解决方法?
或者在 IIS 中托管 net.tcp 是否需要端口共享?
现在我当然可以尝试一下,但我目前只有一个生产服务器来测试它,并想先做一些研究。
【问题讨论】:
为什么你认为端口共享和应用程序池有某种联系? 来自问题:“我的理由是,多个工作进程无法在没有端口共享的情况下处理同一个端口。”多个工作进程来自每个应用程序池的一个应用程序。 来自文档 (docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/…):“如果不允许端口共享并且另一个应用程序已经在使用端口 808,则此服务在打开时会抛出 AddressAlreadyInUseException。” 【参考方案1】:回答您的问题:
是的,它将按照您的预期停止工作。你的推理是正确的。 您可以在一个站点下(因此在同一个池中)使用 portSharingEnabled="false" 来拥有多个应用程序。您可以共享该端口,您将拥有不同的地址。它会工作得很好: net.tcp://example.com:808/FirstApp/Service.svc net.tcp://example.com:808/SecondApp/Service.svc net.tcp://example.com:808/ThirdApp/Service.svc 不需要端口共享。但在这种情况下,您不能共享端口号。您可以尝试迁移您的一个应用程序,看看它是如何工作的。将一个绑定添加到 IIS 站点,将具有新端口的第二个端点添加到 web.config 并更新客户端以查看它是如何工作的。此更新还需要重新配置所有客户端应用程序,因为它们的服务器将位于不同的端口上。
【讨论】:
好的,所以在“一个池中的多个应用程序”的情况下,您仍然需要使用端口共享来托管 net.tcp WCF 服务吗?我以为只有一个工作进程,那个工作进程就可以打开监听端口? 我已经更新了答案,使其更加具体。您可以关闭端口共享。以上是关于WCF net.tcp 绑定:托管多个服务是不是需要端口共享?的主要内容,如果未能解决你的问题,请参考以下文章