2009-06-18 17 views
1

私は次のような状況があります:私は、テーブルの束からデータを取り、単一のテーブルにレコードを作成するストアドプロシージャを持っています。その後、エンドユーザーは、結果の表の行からのデータに基づいてグラフィックスを取得できます。問題は、複数のテーブルからのデータを結果として得られるデータに集めることは、非常に長い期間実行することができるということです。私は自分のWebアプリケーションから、このデータの収集を開始する可能性をユーザーに通知し、収集されたデータに基づいてグラフィックス図にアクセスできるようにするためにこれを通知する必要があります。私の質問は、これをベストプラクティスとして実装する方法です。asp.net Webアプリケーションへのフィードバックを使用してSQLデータを収集

答えて

1

サーバーでバックグラウンドスレッドを開始して処理を行います。処理結果は、session state、データベース、またはその他の場所に格納できます。

クライアント側では、UpdatePanelとTimerを使用して定期的にサーバーの結果をポーリングします。結果が表示されたら、タイマーを無効にします。

0

私はAndomarが示唆したようなものをやっていますが、asp.netプロセスのスレッドではなくWindowsサービスで行います。

まず、作業キューとして使用するデータベースをデータベースにセットアップします。結果テーブルで十分でしょうか?この表には、ジョブ固有のID、ジョブ記述(サービスによって何をすべきかを判断するために使用される)、およびジョブ状況コード(新規、作業中、終了済み)が含まれます。

次に、このテーブルを定期的にポーリングするWindowsサービスアプリケーションをセットアップします。たぶんあなたの負荷に応じて5〜30秒ごとに頻繁に。このサービスは簡単です:新しいジョブが見つかった場合は、最初のジョブを「作業中」としてマークし、データ収集プロセスを実行します。プロセスが完了すると、サービスは完了したとマークします。

最後に、私のasp.netアプリケーションで、ユーザーが新しいデータ収集ジョブを要求できるジョブオーダーページをセットアップしました。要求は、新しいレコードを状態として新規のジョブキューテーブルに挿入し、必要に応じてジョブ記述を挿入する。その後、ページはユーザーにジョブのステータスをチェックし、XX秒ごとにリロードしてジョブが完了したかどうかをチェックする新しいページ(またはajaxを使用)にリダイレクトされます。ジョブステータスコードが完了すると、ユーザーがレポートを表示したり、ファイルをダウンロードしたりできるページが表示されます。

私がここで提案するのは、ポーリングベースのジョブキューの単純な実装です。もちろん、MSMQなどを使用してより美しいバージョンを作成することもできますが、ほとんどの場合そう多くはありますが、これで十分です。

関連する問題