请求通道在等待回复时超时

我有一个小应用程序,它使用WCF与Web服务器通信。 该程序由大约200个客户端使用,每个客户端以大约5-20个请求/分钟发送。

查看错误日志我经常得到:

在00:00:59.9989999之后等待回复时,请求通道超时

请求如下:

ClientService Client = new ClientService(); Client.Open(); Client.updateOnline(userID); Client.Close(); 

这是app.config

                         

在“多次通话”中,每天约200-800人失败。 约n-1是好的。 我很困惑这个问题是什么。 查看服务器统计信息,它几乎没有出汗 – 每个请求都需要<2秒才能处理。 它发送的数据包括“int”或“非常小的字符串” – 所以,它不是由于大小,如果是 – 应该有一致的失败..

建议?

您的请求似乎在处理之前在服务器上排队,然后开始超时。 你可以在这里尝试几件事来看看到底发生了什么

1)尝试在WCF服务中进行限制,例如:尝试增加并发会话。 看一看WCF Throttling

2)尝试使用PerCall而不是使用Sessions来确保没有会话。 您可以在界面上执行以下操作来删除会话

 [ServiceContract(Namespace="YOUR NAMESPACE", SessionMode=SessionMode.NotAllowed)] 

和您的合同类实现这些接口

 ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 

AND ….您应该启用跟踪以查看到底发生了什么。

尝试将超时值添加到服务和客户端:

  

检查此性能计数器 – ASP.NET Requests Queued

一个Web应用程序可以托管许多Web页面和服务。 默认情况下,IIS每个CPU核心仅处理12个并发请求。

这意味着即使您的服务很快但其他页面/服务很慢,您的请求也必须在执行之前等待队列。

ASP.NET Requests Queued应该为零或接近于零。

请参阅MSDN上的ASP.NET性能计数器 。