私のウェブサイトに通知システムを作成したいですか?(スタックオーバーフローのようなもの)
24時間ごとにユーザーに通知をメールで送信するタスクをスケジュールするにはどうすればよいですか?
MVC4を使用できますか、それともWindowsサービスを使用する必要がありますか?
編集:
MVC4アプリ内で3か月にFluentScheduler
を使用した経験。FluentScheduler
は設定と使用が簡単ですが、タスクを実行することはありません。実行される場合と実行されない場合があります。
スケジューリングの最良の方法はWindows Service
特定の時間にタスクが実行されるようにします。
これは素晴らしいスケジューラであることがわかりました FluentScheduler
使用法:
// Schedule an ITask to run at an interval
Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds();
.Net Job Schedulerが必要です。ここに良いものがあります: http://quartznet.sourceforge.net/
多分あなたはスケジュールされたタスクを使いたいです。 MVCでこれを行うのは悪い考え(責任の混合)であり、Windowsサービスの構築はやり過ぎに見えます(常に何かを実行する必要がないためです)。
まず第一に;
Install-Package FluentScheduler
を追加// Schedule a simple task to run at a specific time
Schedule(() => System.Diagnostics.Debug.Write("This is from service " + DateTime.Now.Second+"\n"))
.ToRunNow().AndEvery(2).Seconds();
Global.asax.cs
のApplication_Startに登録します。TaskManager.Initialize(new Test());
Windowsのスケジュールタスクを使用しています。
私はbdにレコードを入力するよりも小さなアプリを作成してから、このrecordId(Guid)をパラメーターとして使用してWebサイトにアクセスします。
MVCで、IDが存在するかどうかを確認し、存在する場合はタスクを実行し、DB内のレコードを削除します。存在しない場合は無視します。
この方法では、パラメーターを使用してスケジュールを追加できません。新しいスケジュールされたタスクが必要になるたびにアプリを更新せずに。 「myapp.exe/MyNewTaskName」のような新しいタスクを追加するだけです
これが誰かを助けることを願っています;-)
組み込みオプションのQueueBackgroundWorkItemもあります。これは.Net 4.5.2と MVCでの使用方法のガイド で追加されました。
前述のFluentSchedulerに加えて HangFire もあります。そして、Azureへの展開を計画している場合 これにはいくつかの異なるサービスがあります 。