5

我们有一个托管在 IIS 中的 WCF 服务。我可以从日志文件中看到,发送需要 3 分钟以上才能执行的请求的客户端收到 HTTP 503(服务不可用)错误。

如何更改超时?为了测试它是否有效,我将超时时间减少到 3 秒,以确保它确实超时了。

我试过了

<system.web> 
    <httpRuntime executionTimeout="3"/> 
</system.web> 

这似乎什么也没做。

我也尝试过更改绑定无济于事。

  <basicHttpBinding>
    <binding name="basicHttp" receiveTimeout="00:00:03" sendTimeout="00:00:03" >
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>

请注意,我试图让 WCF 服务在我们控制的持续时间后返回某种故障。我不希望花费比预期更长的时间来终止请求。

在我把头发扯掉之前,任何帮助都是最受赞赏的。


只是为了澄清...

该服务已经启动并运行了几个月。但是在处理偶尔长时间运行的请求时,客户端会在 3 分钟后收到 HTTP 503 响应。在后台,我们可以看到请求已被正确处理,但花费了 > 5 分钟。显然,此时为时已晚,因为客户端已经收到错误响应。

其他请求正在正常处理。

此时系统上的负载非常低。事实上,这是一个测试环境,事务一次一个,没有重叠。

我也很确定绑定连接到端点。我已经在 WCF 配置编辑器中打开了配置文件,并且所有内容都已正确链接。

甚至可以在 WCF 的这一点上配置超时吗?如果不是,我会理解,但为什么会返回 HTTP 503 错误?

我们真正想做的就是控制返回 503 响应之前的时间长度。

4

2 回答 2

1

通常,当我在对服务端点没有影响的绑定中进行更改时,这是因为绑定未连接到端点。

如果现在一切都得到 503 并且之前工作正常,则可能是作为应用程序池身份的用户帐户的密码已过期。

如果它适用于某些呼叫而不适用于其他呼叫,并且负载增加,则可能是客户端没有关闭连接,并且您达到了最大并发呼叫数的默认限制。

于 2012-11-21T21:08:09.833 回答
1

在 IIS 和测试 WCF 服务中进行了大量实验后,我无法重现该问题 - 即使在同一台服务器上也是如此。这个问题只有公司内的另一个小组看到。

我可以强制 HTTP 503 错误的唯一方法是使应用程序池脱机,但这可以预见地导致在请求进入时立即返回错误。

进一步调查表明,与来自 IIS 的 503 响应相关联的 HTML 与返回给客户端的 HTML 不同。

诚然,这尚未得到证实,但我们得出的结论是,该问题是由客户端和服务器之间的某些网络组件引起的。

两者之间确实有一个代理正在返回超时。

于 2012-11-28T08:54:23.680 回答