为 .NET Web 服务设置超时值

Posted

技术标签:

【中文标题】为 .NET Web 服务设置超时值【英文标题】:Setting Timeout Value For .NET Web Service 【发布时间】:2010-10-17 05:08:14 【问题描述】:

我有一个用 C# 编写的 Web 服务,它位于 SharePoint 网站上。我已使用以下代码修改了 web.config:

<configuration>
  <system.web>
    <httpRuntime executionTimeout="360" />

...

对于 IIS Inetpub 文件、SP ISAPI web.config 文件和 SP 布局 web.config。我还使用相同的代码修改了 machine.config 文件,并尝试解决我在 IIS 中看到的任何超时。

当我从 Windows C# 应用程序调用此 Web 服务时,我可以进入 Web 方法并开始调试变量,但在很短的时间(约 1 分钟,可能更短)之后,变量值不再存在,因为它被返回:

System.Net.WebException "请求中止:操作已超时。"

我试图找出正确的超时值需要设置在哪里以及如何设置。我在完成所有更改后重新启动 IIS,但没有任何更改会产生不同的结果。

谢谢

【问题讨论】:

【参考方案1】:

创建指定绑定和端点地址的客户端后,您可以分配一个 OperationTimeout,

client.InnerChannel.OperationTimeout = new TimeSpan(0, 5, 0);

【讨论】:

当我尝试这样做时,它似乎没有任何区别 private void SetRequestTimeout(IClientChannel client) if (client != null) client.OperationTimeout = new TimeSpan(0, TIMEOUT_EXPIRE_IN_MIN, 0); 这样做?它应该设置超时。【参考方案2】:

尝试在您的网络服务代理类中设置超时值:

WebReference.ProxyClass myProxy = new WebReference.ProxyClass();
myProxy.Timeout = 100000; //in milliseconds, e.g. 100 seconds

【讨论】:

你是对的....我更新了我的答案。您是否尝试在代理类上设置超时值? 您能说明一下您建议在哪里执行此操作吗?我有 Web 服务实例化,但我没有看到 ProxyClass 的任何属性,只是 Proxy...谢谢 此更改将在 C# windows 应用程序中实现。这将是对您的网络服务的网络引用的一部分。 看起来可能是 IIS 中的应用程序池超时设置,它设置为 90 秒。我已经修改了我能找到的每个 web.config 和 machine.config,但没有任何效果 秒还是毫秒?而 100 秒就是 100000 毫秒,你错过了一个零……

以上是关于为 .NET Web 服务设置超时值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 web.config 中设置会话超时

什么是 ASP.NET 中的默认会话超时?

使用 oracle weblogic server 10.3 (java) 为 web 服务设置超时

.NET Web 服务超时异常

如何解决 C# IIS 托管的 WCF NET TCP 服务超时问题

System.Net.Http.HttpClient 不尊重超时并每次使用默认值