ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – asp.net core 2 Web API超时问题

2019-06-27 08:52:52  阅读:179  来源: 互联网

标签:c asp-net-web-api net-core asp-net-core-webapi


我有一个.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的错误.

enter image description here

如何将超时时间增加到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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有