0

基本的にこれを行うMVC3カミソリページがあります

[HttpPost]
public ActionResult Index(Mymodel model)
{
//run background process
return(model);
}
public backgroundprocesscompleted()
{
//write to database
}

バックグラウンド プロセスの実行部分は、ライブラリを介して分析を実行し、完了すると backgroundprocesscompleted を実行します。この全体は小さなファイル (46 行) では機能しますが、より大きなファイル (11k) で実行すると、IIS で実行され、タイムアウトするように見えます。多くの設定を変更しましたが、それでもタイムアウトします。基本的に私がやりたいことは、Web アプリケーションがタイムアウトしないようにすることです。これを修正する方法について何か良いアイデアはありますか? ありがとう

4

1 に答える 1

3

ASP.Net で実行時間の長いバックグラウンド プロセスが失敗する理由はいくつかあります。

  • リクエストに関連付けられていないスレッドで未処理の例外が発生すると、プロセスが停止します。
  • サイトが実行されている AppDomain は、さまざまな理由で停止し、バックグラウンド タスクを停止する可能性があります。
  • web.config を変更すると、ASP.NET は AppDomain をリサイクルします
  • IIS 自体が 29 時間ごとに w3wp.exe プロセス全体をリサイクルします (デフォルト)。
  • 共有ホスティング環境では、多くの Web サーバーは、一定期間非アクティブになった後にアプリケーション プールを破棄するように構成されています。

http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

上記のリンク先の記事には、これらのリスクを軽減するための提案がいくつか含まれています。ただし、ASP.Net の外部で完全に長時間実行される処理を行うことをお勧めします。簡単な方法の 1 つは、作業をトランザクション MSMQ キューに書き込み、Windows サービスでそのキューから作業項目を読み取って処理することです。

于 2012-10-11T17:21:36.877 に答える