2017-03-20 5 views
0

私のアプリケーションでは、実行に長時間かかるタスクが完了するまでに約4/5時間かかります。このタスクは、ループを繰り返し実行することにより、CUBEデータサーバーから数百の組み合わせのデータを取得します。IISで特定の時間が経過するとASP.NETコードが実行を停止します

ローカルのVisual Studio 2015から実行している間は正常に動作しますが、アプリケーションサーバーに展開すると、このプロセスは25分後に自動的に停止します。私がCUBEサーバーから監視しているように、私は25/30分後にデータコールが受信されないことがわかります。

web.configで次のように試してみましたが、IISからセッションタイムアウトを20時間に設定しましたが、一定時間後にデータが停止して完全に完了しないため、何も動作しません。

"86400"

コードが

Task.Factory.StartNew(()=> RunManufacturerModuleCache()、 TaskCreationOptions.LongRunning)below-与えている= executionTimeout。 RunManufacturerModuleCache()メソッド1000回の反復のためのループを有し、各反復はCUBEサーバからデータをフェッチ

IISで実行時間を延ばすことができる設定がありますか?またはIISで25/30分を超える実行プロセスを実行する方法がありませんか?ありがとう!

答えて

1

IISには、アプリケーションプールのアイドルタイムアウト(デフォルトは20分)があります。 IISのアプリケーションプールに移動し、アプリケーションプールと「詳細設定」を右クリックします。 「アイドルタイムアウト(分)」という設定があります。長期間リクエストを受信して​​いないときにアプリケーションプールを自動的にシャットダウンしたくない場合は、0に設定します。

また、数分おきにアプリケーションのホームページ(または単純なページ)にリクエストを送信して、アプリケーションプールを起床させておくこともできます。

ps。 ベストプラクティスを実行する限り、長時間実行されるタスクをリクエスト処理パイプラインに入れないでください。むしろ、長時間実行されるタスクを実行するために別個のサービス(Windowsサービス、Azure WebJobなど)を作成する必要がありますが、それはseparteの議論です。

+0

ありがとうございます。最初の解決策、つまり0をアイドルタイムアウト(分)に設定すると、私にとって効果的です! –

関連する問題