2009-03-25 12 views
2

私はASP.NET WebアプリケーションでQuartz.NETを使用しています。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である理由() "発砲しない?私は前に同様のコードを使用して、それは正常に働いた。

EDIT:@Andy White、私はGlobal_asaxのApplication_Startに持っています。これは問題を絞り込むためにボタンクリックハンドラに移動した理由ではありません。

答えて

4

Quartz.NETのロギングを接続しましたか?私はかつては実行していないジョブで問題を抱えていました(なぜなら忘れてしまいました)。しかし、いったんQuartz.NETのログを取得すると、問題は明らかでした。

(あなたはすでにそれをやっていない場合)、それは試してみる価値はあります:

更新:単にあなたのProgram.csにこれを追加コンソールログを有効にする:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info}; 
+0

の時間を見て、鉱山は私の仕事を実行していたクラスがデフォルト(パラメータなし)publicコンストラクタを持っていなかったということでした。 – patrickbadley

1

スケジューラを実行する方法もあります。私は完全にはわかりませんが、ASP.NETアプリケーションでスケジューリングスレッドを実行しようとすると問題が発生する可能性があります。スケジューラファクトリ/スケジューラオブジェクトをボタンクリックハンドラに入れても、望む結果が得られないようです。

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

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

3

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

私はあなたと同じ問題を抱えていましたが、その時間はUTC + 2の国に住んでいます。そのため、StartTimeUtcをトリガに設定すると、DateTime.Nowを使用したため、 2時間後まで発砲しなければならず、コードが始まった瞬間に解雇されなければならないと思った。

は慎重にこの問題を見つける私を助けたトリガの実行とそののStartTime

+0

ありがとう!それはMY Quartzのセットアップがうまくいかない問題でした。私はちょうどのような何かを:DateTime.Now.ToUniversalTime()とそれは正常に動作します。 – Timotei

関連する問題