WCF MaxConcurrentSessions 超出限制

4
我在公司应用程序遇到了问题。
以下是系统关键要素的概括:
1. 我们公司的系统在Windows XP和7机器上运行了几年。 2. 它是在.NET 4.0上编写的,基于WCF。 3. 它使用默认的调节值(MaxConcurrentSessions=100*CPU(4):适合我们的工作负载)。 4. 主服务由独立的守护进程托管(不是IIS)。 5. 主服务配置为多线程/每个会话实例。 6. 协议是可靠的NET.TCP。 7. 不超过10个客户端同时访问服务。
问题是只有在Windows 7上,偶尔会出现“服务器太忙异常”(通过WCF全跟踪日志发现),这是由于耗尽了MaxConcurrentSessions限制引起的(不可能!)。
您对此奇怪的行为有任何想法吗?
谢谢您,新年快乐!
Antonio

链接http://go4answers.webhost4life.com/Example/connect-busy-wcf-service-host-while-725.aspx提供的“答案2”可能很有趣... - Antonio Petricca
你可能想试试这个。https://dev59.com/dHA85IYBdhLWcg3wD_O8 - cgotberg
非常感谢cgotberg,但ServicePoint的概念仅适用于HTTP连接,而我正在使用NET.TCP连接。 - Antonio Petricca
如果将“MaxConcurrentSessions”增加到更高的值,问题仍然存在吗?也许在某个时刻您有比想象中更多的并发会话。 - Vitor Canova
是的,它仍然存在,正如我所写的那样,这个问题只出现在Windows 7上! - Antonio Petricca
2个回答

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
希望这可以帮助你。
问候,

1

您所有的客户端在使用完服务后是否正确关闭/丢弃连接?值得检查,“幽灵”连接可能会解释这个问题。


1
答案可能有点简短(如何正确关闭/中止...),但我猜这可能是潜在的问题。 - StampedeXV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接