【问题标题】:WCF MaxConcurrentSessions exceeded超出 WCF MaxConcurrentSessions
【发布时间】:2013-12-30 15:56:05
【问题描述】:

我的公司申请遇到问题。

我将总结系统关键要素:

  1. 几年前,我公司的系统一直在 Windows XP 和 7(家庭版、专业版、基础版)机器上运行。
  2. 它是用 .NET 4.0 编写并基于 WCF。
  3. 它使用默认的限制值(MaxConcurrentSessions = 100 * CPU (4) :足以满足我们的工作负载)。
  4. 主要服务由独立的守护进程(不是 IIS)托管。
  5. 主服务配置为 Multithraded/PerSession 实例。
  6. 协议是可靠的 NET.TCP。
  7. 不超过 10 个客户端同时访问该服务。

问题在于,仅在 Windows 7 上,由于 MaxConcurrentSessions 限制已用尽(不可能!!!),我会间歇性地(我通过 WCF 完整跟踪日志发现)“服务器太忙异常”。

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

谢谢你,新年快乐!

安东尼奥

【问题讨论】:

  • 链接go4answers.webhost4life.com/Example/…提供的“答案2”可能很有趣...
  • 你可能想试试这个。 stackoverflow.com/q/2960056/1181408
  • 非常感谢 cgotberg,但 ServicePoint 概念仅适用于 HTTP 连接,而我使用的是 NET.TCP 连接。
  • 如果您将MaxConcurrentSessions 增加到更高的值,问题仍然存在吗?也许您在特定时刻的并发会话数比您想象的要多。
  • 是的,它仍然存在,因为我写的问题只有在 Windows 7 上!

标签: c# wcf session exception throttling


【解决方案1】:

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

【讨论】:

  • 答案可能有点短(如何正确关闭/中止......)但我猜这是根本问题。
【解决方案2】:

我们在自托管 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

希望这会有所帮助。
问候,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2015-02-08
    • 2011-10-09
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多