2

ユーザーがファイルをアップロードできるようにするアプリケーションがあります。アップロードが完了した後、サーバー上で実行する必要がある多くの処理ステップ (解凍、保存、検証など) があるため、すべてが完了すると、後でユーザーに電子メールで通知されます。

System.ComponentModel の BackGroundWorker を使用して非同期作業を別のスレッドで実行できる例をいくつか見てきました。ただし、ユーザーが最終的に応答を得ることにつながるようです。この場合、Web 応答は必要ありません。コードが完了するまでに最大 30 分かかる場合があります。

ユーザーがセッションを完全に閉じた後でも実行し続ける完全に別のスレッド/プロセスを開始する別の方法はありますか?

4

3 に答える 3

1

ASP.NET サーバーで実行される Windows サービスを記述します。ジョブ要求を受け入れてキューに入れることができるように設計します。キューを使用すると、キューに入れられたジョブのサブセットを同時に実行するために、ThreadPool に最適な数のスレッドを作成できます。.NET Remoting または WCF を使用して Windows サービスにジョブを送信します。

于 2013-01-25T20:53:53.217 に答える
1

すぐに応答する必要がない場合は、他のプロセスにオフロードして重い作業を行う必要があります。DB、フォルダーにダンプするか、メッセージキューに投稿します。ワーカー プロセス (Windows サービス?) はファイルを処理し、データベース、ファイル システム、またはキューから読み取ります。作業が完了すると、ワーカー プロセスは、いつ完了したかを知る必要がある場合に、ASP アプリ (Webhook スタイル) を呼び出すことができます。ただの提案です。

于 2013-01-25T20:55:50.170 に答える
0

処理に最大 30 分かかる場合は、Web ワーカー プロセスのバックグラウンド スレッドの使用をスキップして、代わりに Windows サービスのようなものを使用するか、Windows スケジューラを使用してスケジュールに従ってコンソール アプリケーションを実行することをお勧めします。

ファイルがアップロードされたら、何らかのキューに追加します (データベース内、または冒険好きならRabbitMQのようなメッセージ キューイング システムを使用します)。Web リクエストはすぐに返され、ファイルが処理中であることをユーザーに知らせることができます。バックグラウンド サービスはアイテムをキューから取り出して処理を続行し、完了時にユーザーにメールを送信します。

于 2013-01-25T20:55:52.400 に答える