web-dev-qa-db-ja.com

.Net Core2.1長いタスクの進行状況のレポート

私は、非常に古いVBレガシーアプリケーションを、SQLサーバーにバックエンドされたCore2.1とEntityFrameworkを使用してブラウザーベースのC#ASP.Netアプリケーションに書き直している最中です。

関数のいくつかは実行時間の長いタスクです。一例として、住所ガゼッターCSVファイルのインポートがあります。ファイルのサイズは通常50〜100 Mbであり、解析が必要です。アップローダーとインポート機能を作成しました。これは約15分で実行されます。そのほとんどは、データベースの書き込み時間です。

インポートプロセスを実行して、進行状況をクライアントブラウザに報告できるようにする方法を見つけようとしています。理想的には、タスクが完了するまでメニューオプションを進行状況バーに変更します。これは、_layout.cshtmlがすべてのページにあるためです。タスクが実行されていることと、いつ終了するかをすべてのユーザーに通知します。

IHostedServices関数とBackgroundService関数を見てきましたが、実行しようとしていることに一致する例が見つかりません。 SignalRとKnockout(あまり馴染みがない)を使用したMVC5に関する記事を見ましたが、Core2 +以降のサービス機能は使用していません。

誰かが私にこのようなものの良い.NetCore> 2.0の例を指摘できますか?

前もって感謝します。

5
Anthony Hunt

長時間実行されるプロセスの場合、広く使用されている Hangfire を使用できます。

SignalRを介した進行状況の追跡については、ドキュメントで説明されています: http://docs.hangfire.io/en/latest/background-processing/tracking-progress.html

.Net Core2.1と互換性があります。

1
greyxit

個人的には、Topshelfのようなものを使用して処理を行うWindowsサービスを作成します: http://topshelf-project.com/

したがって、ASPアプリは、処理する必要のあるデータを使用してそのプロセスを呼び出し、それを実行します。エンドポイントを追加します(Nancyのようなものを使用する場合があります: http:// nancyfx.org/ )これをASPアプリが呼び出して、進行状況情報を取得できます。

0
Stevo