我们在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响应。在后台我们可以看到请求已正确处理但已采取&gt; 5分钟。显然,到目前为止,由于客户端已收到错误响应,为时已晚。
正在正常处理其他请求。
此时系统的负载非常低。实际上,这是一个测试环境,交易是一次一个,没有重叠。
我也非常确定绑定是否连接到端点。我在WCF配置编辑器中打开了配置文件,所有内容都正确链接。
甚至可以在WCF中配置此时的超时?在某种程度上我会理解,如果没有,但为什么会返回HTTP 503错误?
我们真正想做的就是控制返回503响应之前的时间长度。
答案 0 :(得分:1)
通常,当我对对服务端点没有影响的绑定进行更改时,这是因为绑定未连接到端点。
如果现在所有内容都已获得503并且之前有效,则可能是作为应用程序池标识的用户帐户的密码已过期。
如果它适用于某些调用而不适用于其他调用,并且负载增加,则可能是客户端没有关闭连接并且您达到了最大并发调用数的默认限制。
答案 1 :(得分:1)
经过IIS和测试WCF服务的大量实验,我无法重现问题 - 即使在同一台服务器上也是如此。这个问题只能在公司内部的另一个团体看到。
我可以强制执行HTTP 503错误的唯一方法是使应用程序池脱机,但这可以预见会在请求进入时立即返回错误。
进一步调查显示,与来自IIS的503响应相关联的HTML与返回给客户端的HTML不同。
不可否认,这尚未得到证实,但我们得出的结论是,问题是由客户端和服务器之间的某些网络组件引起的。
确实存在一个代理,它正在返回超时。