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

时间:2018-02-19 15:41:29

标签: c# asp.net iis asp.net-core

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

enter image description here

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

2 个答案:

答案 0 :(得分:6)

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

  

requestTimeout可选的timespan属性。

     

指定ASP.NET核心模块将等待的持续时间   侦听%ASPNETCORE_PORT%的进程的响应。

     

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

     

requestTimeout必须仅在整分钟内指定,否则   它默认为2分钟。

答案 1 :(得分:4)

当数据量巨大并且需要更多时间执行网页时,我也遇到相同的错误,我更改了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",它可以正常工作。

作为参考,请转到此url