私はAzureで実行しているWebアプリケーションを持っています。長いプロセスを処理するAPIエンドポイントがあります(約1時間)。ビジュアルスタジオでローカルに走っているときは問題ありませんが、紺碧に行くと、要求が55秒間始まると失敗します。Azure Web Appsタイムアウトロングプロセスリクエスト
私はすべてのプラットフォームでこの問題を解決しました。このコード行をエンドポイントに追加する機会を変更します。
System.Web.HttpContext.Current.Server.ScriptTimeout = 10000;
これでタイムアウトまで延長することができましたが、3分50秒後には処理できません。この時点で、私はLoad Balancerと呼んでいることが分かりました。彼らは、Azure Load Balancerが4分後にすべてのリクエストを自動的に終了すると言っています。だから私はこの場所にこだわった。
私はこれらすべての解決策を試しています。
1.System.Web.HttpContext.Current.Server.ScriptTimeout = 10000; 2.System.Net.ServicePointManager.SetTcpKeepAlive(true、30000、30000); 3.新しいスレッドの開始を使用して長いプロセスを処理し、httpステータスコードをプロセスが開始されたクライアントの初期値に戻します。 4.別の非同期関数として長いプロセスを作成する
私が達成しようとしているのは、スケジューラータスクまたは手動(AJAX呼び出し)によってトリガーできる非常に単純な長いプロセス関数です。
提案がありますか?
は、私はあなたのサーバー側で何が起こるか、その後APIクライアント側で発生し、何の説明(または何を打破する必要があると思います起こることを望んでいます)私はアプローチ3の詳細を見るのが好奇心です。あなたがすぐに帰ってきた場所 - なぜこれが失敗するのですか? –
@ G.StoynevクライアントのエンドポイントはAJAX呼び出しとなり、最初の設計はこの長いプロセスが終了した後にサーバーに戻り、サーバーの終了はプロセス全体のフローを開始します(チェック、データの追加データベースが、レコードは巨大です)。アプローチ3はちょうど私のばかげたアイデアだから、クライアントはプロセスが完了したかどうかの結果を得たくないと言って、サーバーからの応答を得て、 "Process is start"をユーザーに表示する。スレッドはバックグラウンドで実行されるのが好きなので、ユーザーに結果を返す必要はありません。 提案はありますか? –
要求が処理を開始したが完了していない場合、クライアントがAjax呼び出しを開始し、サーバーがhttp受け入れ状況を返すのはどうですか?クライアント側では、完了したことを示すhttp OKステータスを受け取るまで、onsuccessハンドラはサーバを再クエリできます。 ofcourseクライアントは、操作を一意に識別する正弦波の方法を知っていなければなりません。 –