配置 httpRuntime 的 executionTimeout 属性解决超时问题

2019年05月16日 15:00 · 阅读(3384) ·

[目录]

参考

httpRuntime代码放在web.config哪里?深度了解httpRuntime

问题描述

项目的一个报表页面使用了 ReportViewer 控件

由于数据量较大,请求数据的时间比较长,所以当超过 3 分钟左右的时候,页面会报如下错误

  1. 应用程序中的服务器错误。
  2. 请求已超时。
  3. 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
  4. 异常详细信息: System.Web.HttpException: 请求已超时。
  5. 源错误:
  6. 执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
  7. 堆栈跟踪:
  8. [HttpException (0x80004005): 请求已超时。]
  9. 版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.7.3282.0

本地为了重现这个问题,我再请求数据源之后的地方添加了如下代码

  1. Thread.Sleep(1000 * 60 * 15);

然后设置根目录 web.config 文件

  1. <system.web>
  2. <httpRuntime maxRequestLength="2048000" />
  3. <compilation debug="false" targetFramework="4.0">

运行项目,重现了这个错误

解决办法

在页面对应文件夹下添加 web.config 文件,内容如下

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <system.web>
  4. <!--设置超时时间为半小时-->
  5. <httpRuntime executionTimeout="1800"/>
  6. </system.web>
  7. </configuration>

运行项目,没有出现错误!

HttpRuntime 常用属性

属性名称 属性含义
executionTimeout 表示允许执行请求的最大时间限制,单位为秒。
maxRequestLength 指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。
useFullyQualifiedRedirectUrl 表示指示客户端重定向是否是完全限定的(采用 “http://server/path“ 格式,这是某些移动控件所必需的),或者指示是否代之以将相对重定向发送到客户端。如果为 True,则所有不是完全限定的重定向都将自动转换为完全限定的格式。false 是默认选项。
minFreeThreads 表示指定允许执行新请求的自由线程的最小数目。ASP.NET 为要求附加线程来完成其处理的请求而使指定数目的线程保持自由状态。默认值为 8。
minLocalRequestFreeThreads 表示ASP.NET 保持的允许执行新本地请求的自由线程的最小数目。该线程数目是为从本地主机传入的请求而保留的,以防某些请求在其处理期间发出对本地主机的子请求。这避免了可能的因递归重新进入 Web 服务器而导致的死锁。
appRequestQueueLimit 表示ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该设置中指定的限制时,将通过“503 - 服务器太忙”错误信息拒绝传入的请求。
enableVersionHeader 表示指定 ASP.NET 是否应输出版本标头。Microsoft Visual Studio 2005 使用该属性来确定当前使用的 ASP.NET 版本。对于生产环境,该属性不是必需的,可以禁用。