c# – asp.net core 2 Web API超时问题
作者:互联网
我有一个.net核心web api,其中一个端点运行一个存储过程,需要3-4分钟才能完成. API已部署到IIS.
当我创建一个httpGet时,我得到502 Bad Gateway错误.查看IIS日志,错误实际上是超时.这来自IIS日志:
2018-11-28 17:24:48 10.71.12.59 GET / api / meetingreport fromDate = 11/01/2018& toDate = 11/30/2018& tradingGroup = All& symbol =& reviews = 16000 – 10.6.50.61 Mozilla /5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 64.0.3282.140 Safari / 537.36 – 502 3 12002 120029
错误代码12202适用于ERR_WINHTTP_TIMEOUT.
2分钟后发生超时.请求不到2分钟的工作正常.我通过添加超过2分钟的thread.sleep来检查它.
[HttpGet("")]
public async Task<IActionResult> Get([FromQuery(Name = "fromDate")] DateTime fromDate,
[FromQuery(Name = "toDate")] DateTime toDate, [FromQuery(Name ="tradingGroup")]string tradingGroup, [FromQuery(Name = "symbol")]string symbol, [FromQuery(Name = "reviewed")]string reviewed)
{
try
{
if (fromDate == DateTime.MinValue || toDate == DateTime.MinValue) return BadRequest("fromDate and toDate is a required Field");
tradingGroup = tradingGroup == "All" ? tradingGroup.Replace("All", "") : tradingGroup;
tradingGroup = tradingGroup ?? string.Empty;
symbol = symbol ?? string.Empty;
var result = await _meetingReportRepository.GetMeetingReport(fromDate, toDate, tradingGroup, symbol, reviewed);
Thread.Sleep(132000); // 2.2 minutes
return Ok(result);
}
catch (Exception ex)
{
}
return BadRequest($"Couldn't Genererate Report");
}
这是POSTMAN的错误.
如何将超时时间增加到10分钟?有什么指针吗?没有Web.config文件.
在this发布之后,我更新了我的program.cs以添加10分钟的KeepAliveTimeout.但这没有帮助.我的请求在2分钟后仍然超时.
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel( o=> { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); })
.Build();
编辑1:
部署到IIS时,会创建一个web.config文件,其内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
我将在这里添加超时以查看它是否有效.
编辑2:
添加requestTimeout就可以了. IIS对web.config :)非常忠诚.我的问题已经解决了.
<aspNetCore requestTimeout="00:20:00" processPath="dotnet" arguments=".\project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
解决方法:
我意识到这并不是专门回答你的问题,但我建议这里的问题更多是缓慢的请求 – 而不是任何相关的IIS / Postman / .Net管道超时.
您是否考虑过更改工作流程以发出单个请求以启动流程然后轮询结果?
例如.
>发出POST请求以在后台线程/任务管理处理器上启动进程,并立即接收某种标识新进程的进程ID.
>使用processId作为参数定期轮询另一个GET端点,直到您最终在过程完成后收到结果为止.
标签:c,asp-net-web-api,net-core,asp-net-core-webapi 来源: https://codeday.me/bug/20190627/1303235.html