Quartz.Net 2.0.1 Тригер

Имам уеб приложение и се опитвам да настроя тригер, който да стартира, когато приложението е стартирано, и след това да се задейства на всеки 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() с причината да бъде извикана задачата или го е сбъркал масово?

P.s. Опитах също:

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

Последва крясъци пред компютъра!

Благодаря ви предварително за помощта.

Мат


person Matt    schedule 13.09.2012    source източник
comment
WithSimpleSchedule изглежда добре. Не сте просто забравили да планирате заданието - т.е. Scheduler.ScheduleJob(imageJob, ImageTrigger);   -  person sgmoore    schedule 13.09.2012
comment
Съжалявам, имах това, но забравих да го добавя в публикацията   -  person Matt    schedule 14.09.2012
comment
@Matt: Опитвате ли се да планирате работните си места в уеб услуга?   -  person LeftyX    schedule 14.09.2012
comment
Трябва да можете да извикате ImageTrigger.GetNextFireTimeUtc(); и ImageTrigger.GetFireTimeAfter(dt), за да видите дали заданието е планирано правилно.   -  person sgmoore    schedule 14.09.2012
comment
Опитайте да активирате регистриране, ако работите в режим на отстраняване на грешки, опитайте да настроите Visual Studio да прекъсва при всички изключения. Може дори да се окаже, че вашият конструктор на задание извежда грешка или нещо се обърка (асинхронно) в противен случай (без публичен конструктор без аргумент в заданието и т.н.).   -  person Marko Lahma    schedule 14.09.2012
comment
+1 Благодаря за пълния пример за това как да изградите прост тригер.   -  person ashes999    schedule 26.04.2013


Отговори (1)


Пробвах вашия код и той работи правилно.
Не мисля, че уеб услугата е най-добрият вариант за изпълнение на планирани задания поради естеството си.

Предлагам ви да прочетете Жизнен цикъл на ASP.NET приложение.

Старт на приложението

Извиква се, когато се поиска първият ресурс (като страница) в ASP.NET приложение. Методът Application_Start се извиква само веднъж по време на жизнения цикъл на приложението. Можете да използвате този метод за изпълнение на стартиращи задачи като зареждане на данни в кеша и инициализиране на статични стойности. Трябва да задавате само статични данни по време на стартиране на приложението. Не задавайте никакви данни за екземпляр, защото те ще бъдат достъпни само за първия екземпляр на създадения клас HttpApplication.

Работните процеси на ASP.NET, изпълнявани в IIS, се изключват и рециклират след определен количество време на неактивност. Можете обаче да промените това поведение.

Друга интересна статия може да бъде прочетена тук.

person LeftyX    schedule 14.09.2012
comment
Благодаря @LeftyX - това отговори на въпроса ми. Тъй като задействам заданието по време на събитието Application_Start, мога да направя всичко, което трябва. - person Matt; 18.09.2012
comment
@Мат: Радвам се, че помогнах на Мат. - person LeftyX; 18.09.2012