Quartz.Net ASP.Net 应用程序中

本文关键字:Net 应用程序 ASP Quartz | 更新日期: 2023-09-27 18:37:14

刚 Quartz.Net 下载,阅读过时的文档,最终得到我认为正确的代码。(如果不是,请告诉我)

我把它放在我的 ASP.Net 应用程序的Application_Start中,代码被执行,但作业没有运行。我想我在某处读到过有关将 Quartz 设置为单例的信息,但不确定我是否在这里这样做了?

我想将其设置为每天在 9.00 运行,但现在已使用 StartNow 来检查它是否正常工作。

请告知我该怎么做?

    private void StartScheduler()
    {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = schedulerFactory.GetScheduler();
        scheduler.Start();
        IJobDetail jobDetail = JobBuilder
            .Create()
            .OfType(typeof(DBCleanUpJob))
            .WithIdentity(new JobKey("test", "1"))
            .Build();
        var trigger = Quartz.TriggerBuilder.Create()
                    .ForJob(jobDetail)
                     .WithIdentity(new TriggerKey("test", "1"))
                    .WithSimpleSchedule()
                    .StartNow()
                    .Build();
        //.WithDailyTimeIntervalSchedule(x=>x.StartingDailyAt(new TimeOfDay(09,00)));

        scheduler.ScheduleJob(jobDetail, trigger);
    }
public class DBCleanUpJob : IJob
{
    private IDocumentSession DocumentSession;
    public DBCleanUpJob(IDocumentSession DocSession)
    {
        DocumentSession = DocSession;
    }
    #region IJob Members
    public void Execute(IJobExecutionContext context)
    {
        throw new NotImplementedException();
    }
    #endregion
}

Quartz.Net ASP.Net 应用程序中

正如你所说,调度程序应该是一个单例。 与代码 关于调度程序不是单例,调度程序只存在于应用程序启动的范围内,而不是正在运行的应用程序。

public static IScheduler Scheduler { get; private set; }
private void StartScheduler()
{
    Scheduler = new StdSchedulerFactory().GetScheduler();
    Scheduler.Start();
    var jobDetail = JobBuilder
        .Create()
        .OfType(typeof(DBCleanUpJob))
        .WithIdentity(new JobKey("test", "1"))
        .Build();
    var trigger = Quartz.TriggerBuilder.Create()
                .ForJob(jobDetail)
                .WithIdentity(new TriggerKey("test", "1"))
                .WithSimpleSchedule()
                .StartNow()
                .Build();
    //.WithDailyTimeIntervalSchedule(x=>x.StartingDailyAt(new TimeOfDay(09,00)));
    Scheduler.ScheduleJob(jobDetail, trigger);
}

正如杰霍夫指出的那样。如果在一段时间内没有活动,IIS 将关闭网站/应用程序。

另请注意,您的作业将无权访问 asp.net 管道。 作业不会在请求的上下文中执行,因此会话、请求、响应、Cookie 对作业不可用。

最后,如果您希望调度程序始终运行,则需要独立于网站。Windows 服务是一个很好的候选者。创建一个 Windows 服务项目,并让计划程序在服务启动时启动。然后,您可以在网站上设置Quartz,以将作业代理到Windows服务。允许站点计划作业,但实际存储和执行由 Windows 服务计划程序执行。