ASP.NET Core部署在IIS上,长时间运行的请求返回502错误

19

我有一个ASP.NET Core 2的Web应用程序,它托管在Windows Server 2012上的IIS 10上,没有任何负载均衡和特殊配置。对于一些MVC操作,如果执行时间过长,我们会收到502 HTTP错误。

图片描述

看到这个错误让我感到震惊,因为我没有为代理服务器等进行任何配置。然后我想起了ASP.NET Core运行在Kestrel上,所以我得出结论:这里的IIS充当代理服务器的角色,并将请求转发给Kestrel。所以我认为这某种程度上与超时配置有关,因为应用程序的其他部分工作得非常好。我在SO上搜索了类似的问题,但没有找到解决方案。


1
https://github.com/aspnet/AspNetCoreModule/issues/48 - CodeCaster
1
长时间运行的任务应该在后台运行,特别是如果它需要的时间太长以至于请求超时。你可以使用像Hangfire这样的工具,或者在ASP.NET Core 2.0中,你可以使用 IHostedService。在任何情况下,你的操作应该安排任务,然后立即返回。然后,你可以使用SignalR监视状态,并在任务完成时更新用户。 - Chris Pratt
@ChrisPratt 谢谢你提供的建议,我会去查看一下。 - mst4ash
2个回答

12

默认情况下,ASP.NET Core的请求超时时间为2分钟,您可以通过设置文件中的requestTimeout更改它。在此处查看更多信息

requestTimeout 可选的TimeSpan属性。

指定 ASP.NET Core 模块将等待 %ASPNETCORE_PORT% 上的进程响应的持续时间。

默认值为 "00:02:00"。

requestTimeout 必须仅以整数分钟指定,否则默认为2分钟。


1
有没有其他的想法...这并没有解决我的问题,请求明显超时,即使在配置的时间长度内也是如此,并且出现了相同的错误。 - War

9

当数据量巨大并且执行网页需要更长时间时,我会遇到相同的错误,我已经在web.config中更改了 .netcore 的超时值。

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
           resourceType="Unspecified"/>
      </handlers>
      <aspNetCore requestTimeout="00:20:00"  processPath="%LAUNCHER_PATH%" 
          arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" 
         stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
    </system.webServer>
  </configuration>

我在现有的 web.config 文件中添加了 requestTimeout="00:20:00",并且它能够正常工作。

如需参考,请访问此 链接


仅使用.NET而不是.NET Core呢?即使将executionTimeoutsessionState增加到非常高的数字,我似乎也无法解决它。 - Si8

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