我们正在开发一个客户端 - 服务器系统,客户端连接到服务并从缓冲区中获取图像。该请求通过NetTcpBinding以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次请求可能会发生一次,每晚一次,或每分钟几次,看似随机。
有谁知道可能导致此问题的原因?
答案 0 :(得分:3)
我们发现该解决方案已隐藏在Microsoft客户支持数据库中。
5秒的延迟是由于SWS的发射(愚蠢的窗口 综合症)避免计时器。 SWS计时器计划发送 剩余数据小于1 MSS(最大段大小,1460 字节)和接收器应该发送一个广告的ACK 增加接收窗口并指示剩余的数据字节 可以发送。但是,如果接收器发送ACK,则可以 在5秒内准备好充足的缓冲,SWS计时器不能 由于竞争条件,恢复5秒延迟状态。
http://support.microsoft.com/kb/2020447
仅在使用localhost或127.0.0.1时才会出现此问题。在不同的计算机上运行服务和客户端时不会发生延迟。