2016-12-01 5 views
0

私はMVCアプリケーションで要件を持っています。MVCでスケジュールされたジョブ同等の機能

エクスポートに3分掛かっている(ユーザーがエクスポートボタンをクリックして待っている)という機能がありました。 このエクスポートは、データに特定の規則を適用した後に複数のワークシートを含むExcelをダウンロードします。 これらのルールは、データ管理に加えて、特定の列に属するセルに色を適用するものです。

待ち時間を避けるために、スケジュールされたジョブのように実行できるMVCアプリケーションでコードを開発するように求められました。 このジョブは、スケジュールされた時間(毎日1回)にネットワーク内の専用フォルダにエクセルをエクスポートする必要があります。 また、私は、これらの卓越性をダウンロードするためのリンクを持っているアプリ内のWebページを開発するように頼まれました。ここ

Quesions(任意の助けいただければ幸いです):私はこの要件を実装するためにQuartz.NETを選択した

  1. 。これは、(私の小さな知識に) ジョブをスケジュールする機能(.NETで開発されたクラス)を提供できるオープンソースです。それは正しい選択ですか、それとも今後何か意味がありますか?

  2. これは本当にコードや他のコーディング方法のような仕事を開発する必要がありますか?

答えて

0

私はQuartz.netに精通していないんだけど、私はMVCアプリケーションと同じプロセス内からバックグラウンド/スケジュールされたタスクを実行しようとすると、問題となる可能性があることを知っています。

参考1:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

参考2:基本的にhttp://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

、あなたはどこにMVCプロセスである(これはIISがアプリケーションプールをどのように扱うかにそれを実行しているときに、プロセスが正常に完了することを保証することはできませんとにかくIIS上でのホスティングを想定しています)。

あなたのMVCアプリ内にスケジュールされたタスクを実行しているとお伝えします。繰り返しますが、これは間違っています。なぜあなたはコンソールアプリケーションプロジェクトをソリューションに叩いてそこからコードを駆動し、それをサーバに置き、Windowsタスクスケジューラを使うのではないのですか?

バックグラウンドタスクの点では、これを行う「正しい」方法は、MVCアプリケーションから何らかの種類のメッセージキューにコマンドを送信して、コマンドがドロップされないようにすることです。私は過去にRabbitMQ(ミドルウェアのメッセージブローカー)を使用しました。おそらくこれがQuartz.netの目的です。

この設定では、通常、メッセージキューからコマンドメッセージを受信し、それ自身のプロセスで実行される別のアプリケーション(通常はサーバー上で実行されるコンソールアプリケーション)を使用します。これはMVCとは完全に分離されているため、IIS固有の問題AppPoolsとバックグラウンドタスク。

本当にたくさんの仕事があると思いますが、それはもっと簡単だと思いますが、これは実行するタスクの完全性を維持するための確かな方法です。

+0

ご返信ありがとうございます。あなたは有効なポイントを持っています。私はQuartz.Netについてもっと研究します。 MVCと同じプロセスでスケジュールされたタスクを実行するかどうかはまだ疑問があります。しかしあなたの返信は間違いなく助けになります。もう一度ありがとう –

+0

私はあなたのリンクを通過しました。 Ref2がQuartzを推奨しました。NETのソリューションの1つとして。そのポインタをありがとう!それは助けになった。 –

関連する問題