Azure Webアプリのリクエストタイムアウトを増やす方法はありますか?
リクエストを2分以上遅らせると、リクエストがエラー(空白ページが返される)または503のあいまいな応答なしで失敗します。
public ActionResult Index()
{
System.Threading.Thread.Sleep(230000);
return View();
}
実行する必要のある長時間実行中のリクエストがあります(大きなファイル/大きなPDF変換ジョブをアップロードする)-これを回避する方法はありますか? VMホスティングは可能です。Webアプリを基本プランまたは標準プランにスケーリングしようとしましたが、違いはないようです。
いいえ、Azure App Servicesのタイムアウトを増やすことはできません(230秒です)。クラウドサービスに移動するか、IISでホストされ、VMこれらの設定を制御できます。クライアントが同期する非同期モデルに移動することもできます。リクエストを作成し、処理が完了したかどうかを確認するためにポーリングできるチケットまたは識別子を取得します。そこから選択できるWebアプリの非同期タイプモデルの多くの例があります。Ref: https: //social.msdn.Microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7-2a82fb40135f/time-out-after-230-seconds?forum=windowsazurewebsitespreview
これが助けになることを願っています https://Azure.Microsoft.com/en-us/blog/new-configurable-idle-timeout-for-Azure-load-balancer/ 。しかし、いくつかの重いジョブが実行されている間、リクエストを保持するのは悪い考えだと思います。私見、あなたはバックグラウンドジョブを実装し、クライアントから時々そのステータスを確認した方が良いでしょう。
Webサーバーでのデッドロックを回避するために、長時間実行することになっている場合は、アクションを非同期にしてみてください。
public async Task<ActionResult> Index()
{
await Task.Delay(230000);
return View();
}
また、コントローラーのコードでスクリプトタイムアウトを設定できます。
HttpContext.Current.Server.ScriptTimeout = 300;
HttpContextはリクエストごとにインスタンス化されるため、次のリクエストでデフォルト値に戻ることに注意してください
自動化スクリプトを使用してWebアプリをデプロイし、「リソース」の下に次の行を追加できます。
{
"name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
"value": 1800
},
値はデフォルトで230ですが、1800まで増やすことができます。また、アプリケーション設定の下に、WEBSITES_CONTAINER_START_TIME_LIMITという名前で、希望する秒の値で新しい設定を追加することもできます。