1

何年にもわたるプログラミングの後、初めて非同期で何かを行う必要があります (数分かかり、Web ページがタイムアウトになるためです。ユーザーをそれほど長く待たせたくないためです)。このアクションは少数の人だけが行いますが、1 日に数回 (それぞれに対して) 行うことができます。

LINQ を使用して ASP.NET Web ページの [保存] をクリックし、レコードを SQL Server テーブルに挿入しています。次に、SSIS パッケージをトリガーして、そのレコードを全国の他のいくつかのデータベースにプッシュします。

そう..

  1. ユーザーが他のことを処理できるようにするには、どうすれば (できれば簡単に) これを非同期にすることができますか?

  2. これは .NET 側で設定する必要がありますか?それとも SQL 側で設定する必要がありますか?

  3. プロセスが正常に完了したことをユーザーが知る方法 (数分後) はありますか? もしかしてメール?ユーザーがそれが正常に終了したことを他にどのように知ることができるかわかりません。

このサイトでそれに関するいくつかのスレッドを読みましたが、それらは 2009 年のものであるため、現在 Visual Studio 2012/.NET Framework 4.5 で大きく異なるかどうかはわかりません (まだ SQL Server 2008 R2 を使用しています)。

4

2 に答える 2

1

一般に、ASP.Netで長時間実行されるタスクを実行することはお勧めできません。1つには、タスクが完了する前にアプリケーションプールがリサイクルされると、アプリケーションプールは失われます。

リクエストをデータベーステーブルに書き込み、別のWindowsサービスを使用して長時間実行される作業を行うことをお勧めします。データベーステーブルのステータス列を更新して、後でタスクが完了したかどうか、およびエラーが発生したかどうかを確認できます。

于 2013-03-20T23:40:08.570 に答える
0

SQL 側で Service Broker を使用できます。これは、メッセージ キューの SQL Server 実装です。良い例herehere

行うことは、Service Broker サービスを作成し、いくつかの足場 (キュー、メッセージ タイプなど) を定義することです。次に、基本的にキューからメッセージを消費するストアド プロシージャであるサービスの「アクティベーション」プロシージャを作成します。この SP は、たとえば、テーブル内のレコードの ID を含むメッセージを受信し、それに対して必要な処理を実行し、処理が完了したら電子メールを送信するなどします。

コード ビハインドから、ユーザーのデータをテーブルに挿入する単純なストアド プロシージャを呼び出し、たとえば新しいレコードの ID を使用してメッセージをキューに送信し、すぐに戻ります。これには数分かかる可能性があり、メールなどを受け取ることをユーザーに事前に伝えておく必要があると思います.

Service Broker の優れた点は、メッセージの配信がほぼ保証されていることです。メッセージがキューに入れられた直後に SQL Server がダウンした場合でも、それを元に戻すとアクティベーション SP が再び開始されるため、非常に堅牢です。

于 2013-03-21T00:10:06.793 に答える