WCF服务:状态200与sc-win32-状态64问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

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

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

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

最初我怀疑这可能是因为在MinFileBytesPerSecond上设置了限制,该限制设置HTTP.sys在从客户端向服务器发送数据并从服务器向客户端发回数据时执行的最低吞吐率。但是sc字节和cs字节的值表示发送的数据量在服务通常观察到的范围内。

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

有其他人遇到这个错误?任何关于什么可能是错误的线索? 注意:观察IIS 7.5(IIS版本并不重要) 我能够复制这个问题。如果发生此问题: 1. WCF服务需要很长时间才能响应 2.客户端代理在从服务器收到响应之前超时。在这种情况下,它会导致客户端上的TimeoutException。 3.服务器一直在等待客户端的TCP ACK,它永远不会收到。 因此,超时(TCP套接字超时(默认值:4分钟)和sc-win32-状态为64

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

提问于
用户回答回答于

我再次看到问题,并想指出我找到了解决方案。原来,这是web.config中的这段代码:

     <pages smartNavigation="true">

关闭此功能后,我停止接收相同的超时错误。

用户回答回答于

IIS将服务置于睡眠状态以保存资源。

从这里复制

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

扫码关注云+社区