部署在 IIS 上的 ASP.NET Core 对长时间运行的请求返回 502 错误
Posted
技术标签:
【中文标题】部署在 IIS 上的 ASP.NET Core 对长时间运行的请求返回 502 错误【英文标题】:ASP.NET Core deployed on IIS returns 502 Error for long running requests 【发布时间】:2018-02-19 15:41:28 【问题描述】:我有一个 ASP.NET Core 2 Web 应用程序,它托管在 Windows Server 2012 上的 IIS 10 上,没有任何负载平衡和特殊配置。对于一些耗时过长的 MVC 操作,我们会收到 502 HTTP 错误。
看到这个错误后我很震惊,因为我没有任何代理服务器等的配置。然后我记得 ASP.NET Core 是在 Kestrel 上运行的。所以我得出这个结论,这里IIS扮演代理服务器的角色,将请求转发给Kestrel。所以我认为这在某种程度上与超时配置有关,因为应用程序的其他部分运行良好。我已经搜索了关于 SO 的类似问题,但没有找到解决方案。
【问题讨论】:
github.com/aspnet/AspNetCoreModule/issues/48 Timeouts with long running ASP.NET MVC Core Controller HTTPPost Method的可能重复 长时间运行的任务应该在后台运行,尤其是当请求超时的时间过长时。你可以使用 Hangfire 之类的东西,或者在 ASP.NET Core 2.0 中,你可以使用IHostedService
。在任何一种情况下,您的操作都应该安排任务,然后立即返回。然后,您可以使用 SignalR 监控状态并在任务完成时更新用户。
@ChrisPratt 谢谢克里斯。我去看看。
【参考方案1】:
默认情况下,ASP.NET Core 请求超时为 2 分钟,您可以通过设置文件中的 requestTimeout 更改它。查看更多here
requestTimeout 可选的时间跨度属性。
指定 ASP.NET Core 模块将等待的持续时间 监听 %ASPNETCORE_PORT% 的进程的响应。
默认值为“00:02:00”。
requestTimeout 必须以整分钟为单位指定,否则 默认为 2 分钟。
【讨论】:
任何其他想法......这并不能解决我的问题,请求显然会在配置的时间长度下超时并出现相同的错误。【参考方案2】:当数据很大并且需要更多时间来执行网页时,我会遇到同样的错误,我在 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
【讨论】:
以上是关于部署在 IIS 上的 ASP.NET Core 对长时间运行的请求返回 502 错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境
先定一个小目标Asp.net Core 在IIS上的托管运行