私は以下を作成しました:
- Windowsサービス
- クォーツスケジューラークラス
- と呼ばれる単一の
IJob
実装Worker
。これには、Quartzスケジューラを介して実行する予定の一連のタスクが含まれています。
WindowsサービスはOnStartをオーバーライドして、スケジューリング/セットアップクラスを呼び出します。このクラスは、特定の時間枠で実行する単一のスケジュールされたタスクをQuartz内に作成しようとします(現時点では、これは、たとえば、テストのために30秒に1回です。プロセス)
私は、ジョブとトリガーを作成するためのサンプルの1つと同じコードを使用しました。トリガーには、コードのチェーンが含まれており、すぐに開始され、30秒ごとに永久に繰り返されます。
次に、スケジューラオブジェクトを呼び出しSchedule()
、最終的に呼び出します。Start()
installutil.exeを使用してサービスをサービスリストに追加します。サービスを開始すると、内部ログフレームワークに、サービスが開始され、スケジューラが作成され、ジョブがスケジュールされていることが示されます(出力を1行ずつログに記録します。問題が発生しています...)問題は、タスクが1回実行されず、繰り返されないことです。サービスはそこにあり、正常に実行されていますが、何かを実行するために起動することはありません。
Existsメソッドを使用して、JobKeyを渡すと、常にfalseと表示されます。ジョブの数はゼロであり、スケジューリングとスケジューラーの開始の直後にテストされます。
このアプローチを使用してIJobDetailを設定しています。
IJobDetail job = JobBuilder.Create<Worker>()
.WithIdentity("job1", "group1")
.Build();
次のコマンドでトリガーを作成します。
TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.ForJob(job)
.StartAt(DateTime.Now)
.WithSimpleSchedule(x => x.WithIntervalInSeconds(30).WithRepeatCount(10))
.Build();
そしてそれを接続するには:
sched.ScheduleJob(job, trigger);
sched.Start();
なぜこれが起こっているのか途方に暮れています。イベントログには何もありませんし、サービスにも問題はありません。ログステートメント(/ bin /内のtxtfileに出力)を押し込んだので、コードは問題なく実行されているようです。デバッグ)すべての行の後に&たくさんの例外処理があります。
何か案は?ジェネリックCreateのBuild()は、私が定義したタイプがExecute()
メソッドが存在する場所であることをスケジューラーに通知しますか?
SO(@jadenedgeの回答)に関するこの投稿 から抜粋して、Windowsサービスのapp.config内に配置した構成セクションを編集します。ここで1.0/2.0の不一致の可能性はありますか?
理想的には、app.config内の構成が必要であり、他の構成はありません。