.netコアWebAPIがあり、エンドポイントの1つが、完了までに3〜4分かかるストアドプロシージャを実行します。APIはIISにデプロイされます。
httpGetを作成すると、502 BadGatewayエラーが発生します。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=&reviewed= 16000 - 10.6.50.61 Mozilla/5.0+(Windows+NT+6.1;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/64.0.3282.140+Safari/537.36 - 502 3 12002 120029
エラーコード12202はERR_WINHTTP_TIMEOUT用です。タイムアウトは2分後に発生します。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ファイルはありません。
この投稿に続いて、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" />
requestTimeoutをweb.confgに追加すると、タイムアウトが解決しました。
<aspNetCore requestTimeout="00:20:00" processPath="dotnet" arguments=".\project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
より良いアプローチは、リクエストをキックオフしてから、@ steve-landによって提案された結果をポーリングすることです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加