如何增加Web服务请求的超时时间?

21

我有一个 ASP.NET 的 Web 应用程序,但我不能修改它(只有二进制文件)。这个应用程序连接到一个 Web 服务,但似乎连接从客户端(即我的 Web 应用)关闭了。我已经在目标服务器的 machine.config 中增加了 "executionTimeout",但我的 Web 应用似乎在等待一段时间后仍然停止了。

有没有一种方法可以通过简单修改 web.config 来增加我的 Web 应用程序的超时时间?如我所说…我不能在代码中修改超时时间,因此我的唯一选项就是通过配置文件。

谢谢!


什么样的Web服务?ASP.NET/ASMX还是WCF?ASMX通常在代码中处理,除非您已经特别做了一些事情来能够在配置中指定超时;WCF则需要在配置中设置几乎所有内容... - marc_s
远程 Web 服务确实是一个 ASP.NET ASMX Web 服务。正如我之前提到的,我无法更改我的应用程序中的代码(因为我只有二进制文件)。 - sachaa
如果你只有二进制文件,可以使用 .NET Reflector 进行反编译,查看底层发生了什么,至少能给你一些线索。你可以在 web.config 中配置会话超时时间(不确定是否是你所说的超时时间)。 - nickytonline
谢谢nickyt。会话超时会影响Web服务连接的客户端还是服务器端?我已经通过编辑web.config增加了服务器端,但我的问题是如何增加Web服务的客户端(也是Web应用程序)的等待时间。 - sachaa
3个回答

28

尝试看看这是否适用于您。

首先,您需要增加httpRuntime元素的executionTimeout属性的超时时间。请注意,这与其他超时属性(如会话超时和其他超时)不同,它以秒为单位。

<httpRuntime 
    executionTimeout="36000"

此外,仅当您将Compilation元素的debug属性设置为false时,该属性才会生效。这也在您提到的MSDN链接中有说明。例如,
<compilation 
   debug="false" 
../>

但是这需要与会话超时一起使用。是的,如果会话超时了,那么就会抛出一个错误。它不会等待executionTimeout值生效。因此,您还需要将会话超时设置为更高的值。请注意,这是以分钟为单位的。看起来像:

<sessionState 
    mode="InProc" 
    timeout="360"
    ...
    />

请注意,所有这些都会被应用程序池回收过程覆盖。因此,您需要将网站使用的AppPool的空闲超时值设置为至少与会话超时时间相同/更高的值。
我在这里找到了它 http://www.eggheadcafe.com/community/aspnet/17/10111748/how-can-we-increase-the-t.aspx

我稍微有些惊讶的是,当一个会话正在执行请求时,该会话可能会超时。 - Chris Fewtrell
顺便提一下,如果你将调试设置为false,也可以在VS2008的“虚拟IIS”上进行测试。 - daitangio
2
36000秒 = 600分钟 - martijn

5
默认的Web应用程序超时时间为90秒,这通常对于一般用途来说足够了。重要的是要注意超时是从哪里来的。是来自页面本身还是来自页面中的某些东西导致的。无论哪种情况,都会出现“页面”超时的情况。
我也曾遇到过页面超时的问题。后来发现异常是来自SQL(读取实际错误),因此实际上是SQL的问题。一旦我知道了这点,就可以轻松解决它。

我点赞这个帖子是因为年轻的开发人员经常会直接将问题归咎于超时泵。实际上,像正则表达式或者未使用索引字段的 SQL 查询等大量调用才是问题的根源。首先应该假设超时时间足够长,并且由于代码中有一些可以优化的部分导致超时。只有在进行了合理的设计决策之后,才应当增加 executionTimeout。 - Suamere
1
我的超时是由同事编写的查询引起的,它花了1分43秒。由于有很多复杂的子句和从选择中选择,我不敢轻易动它。但是我将其中一个子句拉到一个临时表中,并在临时表上执行了LEFT( , LEN(REPLACE(....)))查询,而不是在查询的子句上执行。然后我将查询与临时表连接起来。执行时间:降至2秒。大约花费了半个小时。(吹气上手指) - Resource
1
在.NET Framework 1.0和1.1中,默认值为90秒。从.NET 2.0开始,默认值为110秒(1分50秒)。https://msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx - Only You

0
在 web.config 文件中
<binding name="endpointname" sendTimeout="00:3:00" />

这将更新超时属性为3分钟


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接