【问题标题】:Quartz.Net 2.0.1 TriggerQuartz.Net 2.0.1 触发器
【发布时间】:2012-09-13 15:25:38
【问题描述】:

我有一个 Web 应用程序,我正在尝试设置一个触发器以在应用程序启动时启动,然后每 5 分钟触发一次

一切都在 Global.asax 中 - 似乎是放置它的正确位置:

public class Global : HttpApplication
{
    public static StdSchedulerFactory SchedulerFactory;
    public static IScheduler Scheduler;
    public static ITrigger ImageTrigger;

    protected void Application_Start(object sender, EventArgs e)
    {
        SchedulerFactory = new StdSchedulerFactory();
        Scheduler = SchedulerFactory.GetScheduler();

        Scheduler.Start();

        ImageTrigger = TriggerBuilder.Create()
                                     .WithIdentity("ImageTrigger", "Group1")
                                     .StartNow()
                                     .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInMinutes(5))
                                     .Build();

        var imageJob = JobBuilder.Create<DownloadImages>()
                                     .WithIdentity("DownloadImages" , "Group1")
                                     .Build();
        Scheduler.ScheduleJob(imageJob, ImageTrigger);
    }
...
}

所以我假设有一个简单的时间表使用 .WithIntervalInMiniutes() 会导致作业被调用或它是否出现严重错误?

附:我也试过:

        AlertTrigger = TriggerBuilder.Create()
                                     .WithIdentity("AlertTrigger", "Group1")
                                     .StartNow()
                                     .WithCronSchedule("0 0/1 * * * ?")
                                     .Build();

接着对着电脑尖叫!

提前感谢您的帮助。

马特

【问题讨论】:

  • WithSimpleSchedule 看起来不错。您不仅忘记了安排作业 - 即 Scheduler.ScheduleJob(imageJob, ImageTrigger);
  • 对不起,确实有,但忘记在帖子中添加它
  • @Matt:您是否尝试在 Web 服务中安排您的工作?
  • 你应该可以调用 ImageTrigger.GetNextFireTimeUtc();和 ImageTrigger.GetFireTimeAfter(dt) 以查看作业是否已正确安排。
  • 尝试启用日志记录,如果在调试模式下运行,请尝试将 Visual Studio 设置为中断所有异常。甚至可能是您的作业构造函数抛出错误或出现错误(异步),否则(作业中没有无参数的公共构造函数等)。

标签: c# asp.net web-services quartz.net quartz.net-2.0


【解决方案1】:

我已经尝试过您的代码,它可以正常工作。
我不认为网络服务是运行预定作业的最佳选择,因为它的性质。

我建议你阅读ASP.NET Application Life Cycle

Application_Start

在 ASP.NET 中的第一个资源(例如页面)时调用 申请。仅调用 Application_Start 方法 在应用程序的生命周期中进行一次。你可以用这个 执行启动任务的方法,例如将数据加载到缓存中 并初始化静态值。您应该只设置静态数据 应用程序启动。不要设置任何实例数据,因为它会 仅适用于 HttpApplication 类的第一个实例 已创建。

在 IIS 中运行的 ASP.NET 工作进程在一段时间不活动后为shutdown and recycled。不过,您可以改变这种行为。

另一篇有趣的文章可以阅读here

【讨论】:

  • 谢谢@LeftyX - 这回答了我的问题。因为我是在 Application_Start 事件期间触发作业,所以我可以做我需要做的一切。
  • @Matt:很高兴我帮助了马特。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多