WCF服务:状态200,sc-win32-status为64

nmd*_*mdr 19 iis wcf

我们在IIS 6.0上托管WCF服务的其中一台服务器上观察到以下行为:

  1. IIS日志显示时间值较高(> 100000)
  2. HTTP状态代码为200
  3. sc-win32-status代码显示值为64

我发现sc-win32-status代码为64表示"指定的网络不再可用"

最初我怀疑它可能是因为MinFileBytesPerSecond设置了限制,它设置了HTTP.sys在将数据从客户端发送到服务器以及从服务器返回到客户端时强制执行的最小吞吐率.但是sc-bytes和cs-bytes的值表示发送的数据量在通常为服务观察的范围内.

另请注意,WCF服务托管在四个盒子上并且是负载平衡的,但问题只发生在其中一个服务器上.(但基本上不在同一台服务器上).问题也是间歇性的.

有没有其他人遇到过这个错误?关于什么可能是错的任何线索?

更新

注意:观察IIS 7.5(IIS版本并不重要)

我能够复制该问题.如果出现以下问题:

1.WCF服务需要很长时间才能响应
2.客户端代理在收到服务器响应之前超时.在这种情况下,它会导致客户端上出现TimeoutException.
3.服务器一直在等待客户端的TCP ACK,它永远不会收到.

因此,超时超时(TCP套接字超时(默认值:4分钟)和sc-win32-status为64

所以基本上看起来WCF代码需要很长时间才能响应并且客户端超时,我在IIS日志中观察到的只是一个症状而不是问题.

小智 0

IIS 将服务置于睡眠状态以节省资源。

从这里复制(WCF REST服务在不活动后进入睡眠状态

托管服务的应用程序池定义了空闲超时属性(IIS 管理控制台中应用程序池的高级设置),默认值为 20 分钟。如果应用程序池在空闲超时内未收到请求,则为该池提供服务的工作进程将终止。收到新请求后,IIS必须再次启动该进程,该进程必须加载应用程序域和所有相关程序集,编译.svc文件,运行服务主机并处理请求。解决方案可以是增加空闲超时,但意义此超时的原因在于服务器资源的正确处理。如果不需要该过程,则应停止该过程。另一个丑陋的解决方法是使用一些 ping 进程(例如服务器上的 cron 作业或计划任务),它会定期 ping 调用同一应用程序中服务或页面上的某些方法。