IIS请求超时ASP.NET操作

Tac*_*chi 82 asp.net iis iis-6 httprequest

我在运行长操作时遇到IIS的请求超时.在我的ASP.NET应用程序处理数据的场景后面,但正在处理的记录数量很大,因此操作需要很长时间.

但是,我认为IIS超出了会话时间.这是IIS或ASP.NET会话的问题吗?

提前致谢

Kev*_*Kev 142

如果要延长ASP.NET脚本执行所允许的时间,请增加该Server.ScriptTimeout值..NET 1.x的默认值为90秒,.NET 2.0及更高版本的默认值为110秒.

例如:

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;
Run Code Online (Sandbox Code Playgroud)

也可以web.confighttpRuntime配置元素的文件中配置此值:

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意根据MSDN文档:

"此超时仅适用于编译元素中的debug属性为False.因此,如果debug属性为True,则不必将此属性设置为较大的值,以避免在调试时关闭应用程序. "

如果您已经完成此操作但发现会话即将到期,则增加ASP.NET HttpSessionState.Timeout值:

例如:

// Increase session timeout to thirty minutes
Session.Timeout = 30;
Run Code Online (Sandbox Code Playgroud)

也可以web.configsessionState配置元素的文件中配置此值:

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果您的脚本需要几分钟才能执行,并且有许多并发用户,那么请考虑将页面更改为异步页面.这将增加应用程序的可伸缩性.

另一种方法是,如果您具有对服务器的管理员访问权限,则将此长时间运行的操作视为实现作为计划任务或Windows服务的候选者.

  • 同样重要的是要注意调试模式设置为false以便使用此超时值:<system.web> <compilation debug ="false"targetFramework ="4.0"/> </ system.web> (6认同)

Bar*_*art 20

@Kev的精彩和详尽的回答!

由于我只在WebForms应用程序的一个管理页面中进行了长时间处理,因此我使用了代码选项.但为了允许临时快速修复生产,我<location>在web.config 中的标记中使用了配置版本.通过这种方式,我的管理/处理页面获得了足够的时间,而最终用户的页面则保留了旧的超时行为.

下面我为您提供配置Google员工需要相同的快速修复.你应该ofcourse使用比我的'4小时的例子其它值,但千万注意,本次会议timeOut是在几分钟内,而要求executionTimeout是在几秒钟!

并且 - 因为它已经是2015年了 - 对于NON-quickfix你应该尽可能使用.Net 4.5的异步/等待,而不是在2010年KEV回答时使用的.NET 2.0的ASYNC页面:).

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>
Run Code Online (Sandbox Code Playgroud)


Edm*_*ues 8

我在这里张贴这个,因为我已经花了3到4个小时就可以了,而且我只找到了上面那些答案,就是说要添加executionTime,但是在这种情况下它没有解决问题你正在使用ASP .NET Core.对于它,这将工作:

在web.config文件中,requestTimeoutaspNetCore节点处添加属性.

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我将值设置为10分钟.

参考:https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module

  • 这仅适用于“OutOfProcess”托管模型。对于“InProcess”,没有超时设置。IIS 将继续等待该过程完成,参考此处:https://github.com/dotnet/AspNetCore.Docs/issues/16870 (2认同)