4

私は以下を作成しました:

  • 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内の構成が必要であり、他の構成はありません。

4

2 に答える 2

3

プロセスを実行し続けるスレッドを開始していますか?サービスが開始された後、プロセスはまだメモリに残っていますか?

于 2012-07-27T14:32:02.017 に答える
0

私はこの問題を抱えていました、そしてそれは私を絶対に夢中にさせました。たまたま、いつでも実行できるスパイクプロジェクトがありましたが、メインプロジェクトは実行されませんでした。

問題:私のプロジェクトの名前空間にはドット/ピリオドが含まれていました。たとえばMyProject.UpdateService、私のスパイクは単に。という名前QuartzTestでした。

MyProjectUpdateService行ごとにデバッグすると、Windowsサービス名をQuartzジョブに設定すると、登録されたことがわかりました。

TL / DR:Windowsサービスの名前にドットが含まれていないことを確認してください。

更新:さらにテストを行いましたが、Quartzを実行しているWindowsサービスのサービス名の最大長は25文字のようです。エラーは発生しません。起動しないだけです。

于 2017-02-12T17:46:05.093 に答える