2009-03-14 22 views
1

私は、データベース内のファイルを更新または追加するaspx Webアプリケーションを持っています。クライアントはブラウザを介してアクセスし、要件の1つは、更新が開始され、更新が継続している間にブラウザを閉じることができることです。私はブラウザを閉じた後に少し動いているように見えますが、それは止まります。 asp.netのためにアプリケーションをどのように実行し続けることができますか?ブラウザ終了後にWebアプリケーションを実行し続ける

答えて

3

それはWF (Workflow Foundation)で非常にうまく解決できるものです。ブラウザを終了しても残るはずのタスクのワークフローを作成します。ワークフローには、ASP.NETとは別の独自のスレッドとライブサイクルがあります。

0

別のWindowsサービスを作成して、Webアプリケーションからジョブをプッシュして、ユーザーが再びログインしたときにジョブのステータスを確認できます。

Windowsサービスはasp.netアプリケーションドメインに関連付けられないため、Webアプリケーションで何が起きているかに関係なく実行されます。

1

ウェブアプリケーションはアプリケーションプールで稼動し続けますが、最終的にリサイクルされます。ユーザーセッションが実行されている間は、アプリケーションを有効に保つ必要があります。そのため、セッションのタイムアウトを調整することで問題を解決できます。

ただし、長期実行タスクをサービスに移行する方が良い方法ですが、アプリケーションの書き換えが必要な場合があります。

1

通常、長期実行または非同期処理の場合、処理するバックエンドサービスに要求をディスパッチする必要があります。 Webアプリケーションを処理し続けるようにしようとすると、特にHTTPとセッションタイムアウトで問題が発生する可能性があります。

一般的なパターンは、要求をメッセージキューに置き、可能な場合にはバックエンドサービスに処理させることです。

+0

あまりにも遅い –

0

私はこのパターンを実行しており、HTTP要求から作業を分離する必要があります。私たちが解決した方法は、スケジューリングされるイベントとして実行されるコンピューティングを抽象化することです。したがって、ブラウザのユーザーがバックエンドで長時間の(比較的)計算を必要とするアクションを実行すると、この計算には「doXYZForUser」のような名前が与えられ、(userId、params ...のような)作業キューに送信されます。将来、ユーザは再びログインして、自分の仕事のステータスを見ることができます。

私はJavaスタックとJava Message Service(JMS)を実行していますが、原則は同じです。ブラウザからの要求はイベントをキューに入れ、ブラウザはそのイベントが作業キューにあることを示すACKを返します。キューは、完全に独立して実行されるプロセスによって管理されます。これは、.NETでは単にメッセージキューと呼ばれると考えられています。キュー上のジョブが処理され、その結果は、ジョブを開始したユーザーへの参照を含む別のテーブルに置くことができるため、次回のジョブのログイン時に結果を返すことができます。

関連する問題