ASP .net MVC WebアプリをAzure Appサービスにデプロイしました。
私は自分のサイトから、DB(DbContext)からデータを取得するコントローラーメソッドに対してGETリクエストを実行します。 DBからデータを取得するプロセスには4分以上かかる場合があります。つまり、私のリクエストには4分以上アクションがありません。そのAzureが接続を終了した後、次のメッセージが表示されます。
500-要求がタイムアウトしました。
指定された時間内にWebサーバーが応答しませんでした。
これはメソッドの例です:
[HttpGet]
public async Task<JsonResult> LongGet(string testString)
{
var task = Task.Delay(360000);
await task;
return Json("Woke", JsonRequestBehavior.AllowGet);
}
私はこのような多くの質問を見てきましたが、答えがありませんでした:
動作していません1 他のリンクを与えることはできません-評価が低すぎます。
私はこれを読んだ 記事 -ウェブアプリでは利用できないAzure Load Balancerについてですが、Azureウェブアプリで私の問題を処理する一般的な方法はTCPキープアライブ:メソッドを変更しました:
[HttpGet]
public async Task<JsonResult> LongPost(string testString)
{
ServicePointManager.SetTcpKeepAlive(true, 1000, 5000);
ServicePointManager.MaxServicePointIdleTime = 400000;
ServicePointManager.FindServicePoint(Request.Url).MaxIdleTime = 4000000;
var task = Task.Delay(360000);
await task;
return Json("Woke", JsonRequestBehavior.AllowGet);
}
しかし、それでも同じエラーが発生します。私は次のような単純なGETリクエストを使用しています
GET /Home/LongPost?testString="abc" HTTP/1.1
Host: longgetrequest.azurewebsites.net
Cache-Control: no-cache
Postman-Token: bde0d996-8cf3-2b3f-20cd-d704016b29c6
そこで、私が間違っていることと、Azure Webアプリでリクエストのタイムアウト時間を増やす方法についての答えを探しています。どんな助けも大歓迎です。
ポータルのAzure設定:
Webソケット-オン
常にオン-オン
アプリの設定:
SCM_COMMAND_IDLE_TIMEOUT = 3600
WEBSITE_NODE_DEFAULT_VERSION = 4.2.3
230秒。それでおしまい。これは、Azure App Serviceの実行中のリクエストタイムアウトです。プラットフォームにハードコードされているため、TCP keep-alivesであるかどうかにかかわらず、まだバインドされています。
Source-David Ebboの回答はこちら:
https://social.msdn.Microsoft.com/Forums/en-US/17305ddc-07b2-436c-881b-286d1744c98f/503-errors-with-large-pdf-file?forum = windowsazurewebsitespreview
データを送信していないリクエストには230秒(つまり、4分弱)のタイムアウトがあります。その後、実際にはリクエストはサーバー側で続行することが許可されていますが、クライアントは500を受け取ります。
アプリケーションについて詳しく知ることなく、別のアプローチを提案することは困難です。ただし、明らかなのは、別のアプローチが必要なことです-
たぶん202 Accepted
代わりにLocation
ヘッダーを使用して、後で結果をポーリングしますか?