2

我有一个 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() 导致作业被调用或者它有很大的错误?

PS我也试过:

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

紧接着对着电脑尖叫!

在此先感谢您的帮助。

马特

4

1 回答 1

0

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

我建议您阅读ASP.NET 应用程序生命周期

应用程序_开始

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

在 IIS 中运行的 ASP.NET 工作进程会在一段时间不活动后关闭并回收。不过,您可以改变这种行为。

可以在这里阅读另一篇有趣的文章。

于 2012-09-14T10:05:10.213 回答