0

私は Orchard CMS Web サイト プロジェクトを構築しており、データがデータベースに定期的に保存されるジョブをスケジュールする必要があるため、次のように Orchard.Web の Global.asax で Quartz.NET を使用します。

protected void Application_Start() {
    RegisterRoutes(RouteTable.Routes);
    _starter = new Starter<IOrchardHost>(HostInitialization, HostBeginRequest, HostEndRequest);
    _starter.OnApplicationStart(this);

    ISchedulerFactory sf = new StdSchedulerFactory();

    // get a scheduler
    IScheduler sched = sf.GetScheduler();
    sched.Start();

    var job = JobBuilder.Create<JobWorker>()
    .WithIdentity("job1", "group1")
    .Build();

    ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartAt(DateTime.Now)
    .WithCronSchedule("5 0/1 * * * ?")
    .Build();

    sched.ScheduleJob(job, trigger);
}

JobWorker クラス - Orchard.Web の Global.asax と同じレベルのフォルダーに配置されます。

public class JobWorker : IJob, IDependency {
    private readonly ISchedulerService _schedulerService;

    public JobWorker (ISchedulerService schedulerService) {
        _schedulerService = schedulerService;
    }

    public void Execute(IJobExecutionContext context) {
        _schedulerService.ExecuteJob();

    }
}

ただし、次のようにデバッグ出力コンソールで結果を受け取りました。

A first chance exception of type 'System.ArgumentException' occurred in Quartz.dll
A first chance exception of type 'Quartz.SchedulerException' occurred in Quartz.dll
A first chance exception of type 'Quartz.SchedulerException' occurred in Quartz.dll
The thread '<No Name>' (0x2278) has exited with code 0 (0x0).
The thread '<No Name>' (0x3368) has exited with code 0 (0x0).
The thread '<No Name>' (0x22a8) has exited with code 0 (0x0).
The thread '<No Name>' (0x2bc8) has exited with code 0 (0x0).

オーチャードではなく、web mvc 4 プロジェクトでこのコードを使用してみましたが、問題なく動作しました。したがって、問題は Orchard CMS にあると思います。私は何をすべきか ?SchedulerService のメソッド ExecuteJob() を定期的に呼び出すためのタイマーのみが必要です。

4

1 に答える 1

3

どうすれば Orchard で Quartz.NET を動作させることができるかわかりませんが、Orchard には定期的なバックグラウンド タスクやスケジュールされたバックグラウンド タスクを処理するための独自のサービスがあります。

単純な繰り返しタスクの場合はIBackgroundTask (サンプル) を実装し、より洗練されたタイミングの繰り返しタスクまたはスケジュールされた 1 回限りのタスクの場合はIScheduledTaskHandler (サンプル) を実装してください。

于 2013-06-27T11:42:19.340 に答える