超出了WCF MaxConcurrentSessions

时间:2013-12-30 15:56:05

标签: c# wcf session exception throttling

我遇到了公司申请的问题。

我将总结系统关键元素:

  1. 我公司的系统在Windows XP和7(Home,Pro,Basic)计算机上运行了几年。
  2. 它是用.NET 4.0编写的,基于WCF。
  3. 它使用默认限制值(MaxConcurrentSessions = 100 * CPU(4):足够我们的工作量。)
  4. 主要服务由独立的deamon进程(不是IIS)托管。
  5. 主服务配置为Multithraded / PerSession实例。
  6. 协议是可靠的NET.TCP。
  7. 不超过10个客户端同时访问该服务。
  8. 问题是只在Windows 7上,间歇性地,我得到(我发现通过WCF完整的跟踪日志)a"服务器太忙的异常"由于MaxConcurrentSessions限制用尽(不可能!!!)。

    你对这种奇怪的行为有什么看法吗?

    谢谢你,祝你新年快乐!

    安东尼奥

2 个答案:

答案 0 :(得分:1)

使用后,您的所有客户端是否正确关闭/处置与服务的连接?值得检查的是,“幽灵”连接可以解释这一点。

答案 1 :(得分:1)

我们遇到了与自托管WCF接口类似的问题,该接口为异步(2个单向服务调用)后端请求提供了同步请求/响应Web服务。在我们测试的早期,我们发现在经过一段时间后,我们的服务对新请求没有反应。经过一些研究,我们发现只要后端服务(不在我们的控制范围内)没有发送响应,我们就会无限期地等待,因此我们保持客户端连接打开。

我们通过提供“等待时间”配置值来解决问题,因此我们确保响应客户端并关闭连接。我们使用了类似下面的东西......

Task processTask = Task.Factory.StartNew(() => Process(message));

bool isProcessSuccess = processTask.Wait(shared.ConfigReader.SyncWebServiceWaitTime);

if (!isProcessSuccess)
{ 
 //handle error … 
}

以下链接提供有关WCF服务性能计数器的信息,可能有助于进一步确定是否按预期关闭了呼叫。 http://blogs.microsoft.co.il/blogs/idof/archive/2011/08/11/wcf-scaling-check-your-counters.aspx

希望这有帮助。
的问候,