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 绑定:托管多个服务是不是需要端口共享?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 C# IIS 托管的 WCF NET TCP 服务超时问题

用于 net.tcp 绑定的 WCF url 重写

更改 WCF 服务的绑定?

WCF Net.tcp 仅在本地失败

WCF 服务上的多个绑定

WCF:单个服务的多个绑定配置