2

多くの場合、SQL サーバーを使用して、asp.net サイトからサード パーティの会計システムとの間でデータを送信する必要があります。通常、データのインポートにはしばらく時間がかかります。私は、実行状況を確認したい場合にユーザーを更新する機能を備えた、長時間実行されるタスクを処理するための最良の方法を見つけようとしています。私の質問は、以下の方法の長所と短所のいくつかと、推奨するものとその理由です。

  • 古いスタイルの asp response.write:私は実際にこれをかなり使用していますが、現時点では高速であるため、このメソッドを使用しています。私はそれで多くの問題を抱えていません。アプリプールのリサイクルが問題になると思いましたが、リクエストの途中でリサイクルされるとは思いません。

  • ここで提案されているような IFrame の使用http://encosia.com/easy-incremental-status-updates-for-long-requests/ :上記の方法と同様ですが、これは非同期です。 .net 再起動

  • サイトから Web サービスを呼び出す別の Windows アプリ:この方法を使用しましたが、セットアップに時間がかかり、アプリ プールがリサイクルされると実行が停止します。多分この方法は使わない

  • Windows ワークフロー: 使用したことはありませんが、(特に小さなデータ更新の場合) やり過ぎのようです

  • Windows サービス: 上記と同じ。難しすぎるらしい

  • Ajax、スレッドとタイマーを分離してキャッシュされた結果をポーリングする: これもかなり使用しましたが、asp.net が認識していない別のスレッド上にあるため、アプリ プールがリサイクルされると停止します。

4

2 に答える 2

1

ジョブに数分以上かかる場合は、作業を行うプロセスによってジョブのステータスが更新されるデータベースにジョブを追加することをお勧めします。新しいジョブのデータベースを監視する小さなコマンド ライン アプリケーションまたは Windows サービスを実装できます (作成するのはそれほど悪くありません。Writing a Useful Windows Service in .NET in Five Minutes を参照してください)。1 つを見つけると、それをピックアップし、そのステータスを更新します。エンド ユーザーは、各ジョブとその進行状況を一覧表示するページにリダイレクトできます。ジョブが完了すると、データベースの行が更新され、アプリケーションは新しいジョブが来るのを待ちます。

于 2012-06-04T16:13:43.210 に答える
0

これは、実行したいバックグラウンド タスクがどれほど重要であり、何がそれをトリガーするかという問題です。既知の間隔ごとに発生する繰り返しイベントの場合、アプリケーション スレッド (global.asax) でタイマーを作成するのが次の例のように最適であることがわかりました。

ASP.NET で繰り返しバックグラウンド タスクを実装する - http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

クライアント側をカバーするには、iframe でうまくいきますが、Ajax リクエストの方がもう少しエレガントです。

HostingEnvironment.RegisterObject でタスクに署名している限り、プールのリサイクルがジョブに干渉することはありません。

于 2012-06-04T14:00:16.170 に答える