在我当前的项目中,我们(我的意思是“项目团队”)使用托管在 IIS 上的 WCF 服务。
以下是一些可能很重要的技术细节:
- 我们将 NET 3.5 用于 WCF 服务
- 我们使用 NET.TCP 通信协议
- 我们同时使用 IIS 7 和 IIS 7.5 来托管这些服务
- 我们在每台服务器上使用多个 IIS 工作进程
所以,问题是 - 有时 WCF 服务变得不可用。当我们尝试访问这些 WCF 服务时,我们会收到超时错误。恢复 WCF 服务功能的唯一方法是重新启动 NetTcpActivator(Net.Tcp 侦听器适配器)Windows 服务。
根据我同事的理论,这个错误可能与这篇知识库文章中描述的问题有关:
修复:当您运行基于 .NET Framework 4 的 WCF 服务时,WCF 服务的 Smsvchost.exe 停止响应http://support.microsoft.com/kb/2536618
根据这篇文章,如果 SMSvcHost(承载 NetTcpActivator 和端口共享服务的容器服务)在超过 60 秒(不可配置的超时)内无法将请求路由到 w3wp(IIS 工作进程),则会挂起。不幸的是,我们无法找到重现此错误的方法。例如,我们将 SMSvcHost 限制为 1 个 CPU 内核和 1 个线程,并将挂起的连接扩展限制为 1M,并在用户模式下将其推至 100% CPU 负载。它没有挂起!
有时我们的负载测试会导致奇怪的错误,但是当我们停止它们时,所有服务都会自动恢复到正常状态。但有时负载不重可能会挂掉NetTcpActivator!
另外,我想说这不是一个新问题。我的同事在 3 年前就已经知道了(有关更多信息,请参阅此线程http://forums.iis.net/t/1167668.aspx/1/10)。而且,不幸的是,他们没有得到答案。一些配置更改后问题就消失了!现在它又回到了新服务器上。
我将非常感谢您的所有想法和想法!