偶尔的WCF 5秒响应峰值

  • 本文关键字:响应 5秒 WCF 偶尔 c# wcf
  • 更新时间 :
  • 英文 :


我们正在开发一个客户端-服务器系统,其中客户端连接到服务并从缓冲区获取图像。请求在netttcpbinding上以25赫兹(每秒25个请求)的速度运行。发送的图像数据包含图像缓冲区(byte[])和一些关于图像的元数据。

我们所经历的是,偶尔,服务器没有响应5秒(5020到5050毫秒),我们不知道为什么。

在客户端运行svc日志,我们看到如下

Activity Boundary                   Suspend       10:00:00:000
Activity Boundary                   Resume        10:00:00:003
Received a message over a channel   Information   10:00:05:017

当服务器作为托管WCF服务和非托管WWS服务运行时,

都会发生这种情况

它可以每100,000个请求发生一次,每晚一次,或者每分钟以看似随机的间隔发生几次。

有谁知道可能导致这个问题的原因吗?

我们在微软客户支持数据库中找到了解决方案。

5秒的延迟是由于触发了SWS(愚蠢窗口)(综合症)回避计时器。定时发送SWS定时器小于1mss(最大段大小,1460)的剩余数据(字节),接收方应该发送一个ACK通告增加接收窗口并指示剩余数据字节数可以发送。然而,如果接收方发送了一个ACK,当它可以在5秒内准备好足够的缓冲区,SWS定时器不能恢复由于竞争条件导致的5秒延迟状态。

http://support.microsoft.com/kb/2020447

此问题仅在使用localhost或127.0.0.1时发生。当在不同的机器上运行服务和客户端时,不会发生延迟。

最新更新