2012-03-20 15 views
3

サーバーパスにいくつかのファイルを生成するボタンが付いたWebページがあります。 (5分から20分程度かかります)。私はユーザーがブラウザを閉じた後でも実行を続ける非同期タスクを作成したい。 asp.net 4とC#でこれを行うことは可能ですか?asp.netでメソッドを非同期で実行する

+0

その他の質問 - http://stackoverflow.com/search?q=aspnet + long + running + task –

+0

これはhttp://stackoverflow.com/questions/57845/backgroundworker-thread-in-asp-netと同じ質問ですか? – PinnyM

答えて

0

あなたがしたいこと、またはあなたが何かをする必要がないことを私は理解していませんでした。

要求が送信された後、ユーザーのブラウザが閉じられているかどうかにかかわらず要求プロセスは続行されます。あなたは長時間実行されるタスク

を下に見ていたスレッドを作成する必要が

+0

ニース。ユーザーがページ上で他のアクションを実行したい場合は、ページを待機させない方法です。 – user194076

+0

@ user194076 ajaxリクエスト。 google _ "ajax tutorial" _あなたに新しいことならば。 – gdoron

0

...ステートレスなWebアプリケーションのもの

素晴らしい自然を行う必要はありません。

http://kiranpatils.wordpress.com/2010/01/01/performing-a-long-running-task-with-asp-net/

とにかくそれは(あなたがアプリプールをリサイクルしたり、Webサーバーを再起動するまで)、ユーザーがブラウザを閉じても実行し続けます今まであなたがサーバー上で起動します。

+0

この記事は9歳です。現在のASP.NET開発標準には該当しません。 –

+0

asp.netの動作方法は変わりません –

+0

いいえ、開発アドバイスは悪いです。それ以来多くのことが学んできました。 –

0

スレッドプールを使用した新しいスレッドの作成は、暴走タスクを作成する最も簡単な方法です。

長いタスクの実行中にプロセスが生き続けることは保証されないので、部分的な完了と手動の再起動を処理する準備ができていることに注意してください。私。設定変更によるAppPollリサイクル。

0

最も簡単な方法は、あなたのタスクをThreadPoolに置くことです。 Webページのレンダリングが完了した後でも、スレッドプールスレッドは存続します。コードは次のようになります。

/* Beginning Method */ 
object someData = new object(); 
ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessAsync), someData); 
/* Ending Method */ 

static void ProcessAsync(Object stateInfo) 
{ 
    string dataToString = stateInfo.ToString(); 
} 
1

実際はそうしないことをお勧めします。代わりに、処理を非同期的に実行するサービス(Windowsサービスなど)を作成することをお勧めします。 Webアプリケーションでは、プロセスを開始するメソッドと、処理が完了したかどうかを判断するためにサービスをポーリングする別のメソッドを作成します。

これにはいくつかの理由がありますが、最も大きな点の1つは、Webサーバーのデフォルトおよび推奨の構成によってサーバーが長時間実行される要求を強制終了できることです。

+0

これをどうやって行うの?または有効なチュートリアルへのリンク。 – user194076

+0

Webサービスから公開するメソッドを含むWebソリューションのインターフェイスを作成します。チュートリアル[リンク](http://www.codeproject.com/Articles/3990/Simple-Windows-Service-Sample)にここをクリックして、インターフェイスを実装してWebサービスを作成します。 WindowsサービスにパススルーするWebアプリケーションに[web]サービスエンドポイントを追加します。私はたくさんの点で光沢があります。これには相当量の作業が必要ですが、そこで行う方法についてのチュートリアルがたくさんあります。これが初めての学習方法です。 –

1

asp.netアプリケーションでスレッドプールを制御しません。要求が開始された同じスレッドで完了することを保証することさえできません。スレッドを作成すると、Webサーバーが使用するのと同じアプリケーションプールが使用され、すべての要求スレッドを使い切って、Webサーバーを利用できずに要求を処理できます。

Webアプリケーション内から呼び出すことができるWCFサービスをホストするWindowsサービスを実装する必要があります。サービスでは、スレッドを実行して長時間実行されるプロセスを処理できます。そのプロセスの最後に、ユーザーがファイルの処理が完了したかどうかを確認するためにステータスフラグ(たとえば、処理から完了)を更新できます。

Windowsサービスを実装するためにTopshelfを使用することをお勧めします。

関連する問題