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

时间:2012-09-05 09:22:27

标签: wcf iis

我们在IIS 6.0上托管WCF服务的其中一台服务器上发现了以下行为:

  1. IIS日志显示时间值(> 100000)
  2. 的值很高
  3. HTTP状态代码为200
  4. sc-win32-status代码显示值64
  5. 我发现sc-win32-status code of 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日志中观察到的只是一个症状而不是问题。 < /强>

3 个答案:

答案 0 :(得分:1)

如果您超出WCF服务的最大会话数,呼叫数或实例数(取决于您如何配置服务实例上下文模式),也会出现您所描述的行为。如果您观察到%max并发会话和/或%max并发调用的System.ServiceModel性能计数器(同样取决于您的服务的实例上下文),您可能会看到与IIS日志条目的关联。

请注意,可以在服务限制行为中配置这些最大值。

https://msdn.microsoft.com/en-us/library/vstudio/system.servicemodel.description.servicethrottlingbehavior(v=vs.100).aspx

答案 1 :(得分:0)

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

从这里复制(WCF REST Service goes to sleep after inactivity

  

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

答案 2 :(得分:0)

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

     <pages smartNavigation="true">

关闭此功能后,我停止接收相同的超时错误。另请参阅the answer here