3

ASP.NETWebアプリケーションでQuartz.NETを使用しています。次のコードをボタンクリックハンドラーに入れて、(テスト目的で)実行されることを確認します。

Quartz.ISchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory();
Quartz.IScheduler scheduler = factory.GetScheduler();
Quartz.JobDetail job = new Quartz.JobDetail("job", null, typeof(BackupJob));
Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(8, 30); // i edit this each time before compilation (for testing purposes)
trigger.StartTimeUtc = Quartz.TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
trigger.Name = "trigger";
scheduler.ScheduleJob(job, trigger);
scheduler.Start();

これが「BackupJob」です。

public class BackupJob : IJob
{
    public BackupJob()
    {
    }

    public void Execute(JobExecutionContext context)
    {
        NSG.BackupJobStart();
    }
}

私の質問:「BackupJobStart()」が起動しないのはなぜですか?私は以前に同様のコードを使用しましたが、正常に機能しました。

編集:@Andy White、Global.asaxのApplication_Startにあります。これは機能しないため、ボタンクリックハンドラーに移動して問題を絞り込みました。

4

4 に答える 4

5

Quartz.NETロギングを接続していますか?私はかつてジョブが実行されないという問題を抱えていました(理由を忘れています)が、Quartz.NETロギングを開始すると、問題は明白でした。

試してみる価値があります(まだ行っていない場合):

更新:これをprogram.csに追加するだけで、コンソールログが有効になります。

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info};
于 2009-03-25T06:54:52.217 に答える
3

多分それは時間の問題です。

私はあなたと同じ問題を抱えていて、UTC + 2 の国に住んでいます。そのため、StartTimeUtc をトリガーに設定すると、DateTime.Now を使用したため、トリガーを起動する必要はありませんでした。 2時間後、コードが開始された瞬間に起動する必要があると思いました.

トリガーの実行時間とその StartTime を注意深く見てください。

于 2010-03-31T11:52:13.270 に答える
1

もう1つの可能性は、スケジューラーの実行方法です。完全にはわかりませんが、ASP.NETアプリケーションでスケジューリングスレッドを実行しようとすると問題が発生する可能性があります。SchedulerFactory / Schedulerオブジェクトをボタンクリックハンドラーに配置しても、目的の結果が得られるとは思えません。

アプリケーションの「バックグラウンド」で実行できるように、より「グローバル」レベルでスケジューラーを作成する必要がある場合があります。また、スケジュールされた作業を別のWindowsサービスに移動して、Webアプリでスケジューラーを維持する必要がないようにすることも理にかなっています。

過去に成功したとき、どのようにスケジューラーを呼び出しましたか?

于 2009-03-25T07:01:57.817 に答える