Как планировать задачи с помощью Quartz.Net внутри службы Windows? - PullRequest
5 голосов
/ 10 февраля 2011

Я создал проект службы Windows в VS, и в нем я настраиваю Quartz.Net для немедленного запуска задачи. Код, который регистрирует задачу, выполняется без исключения, но, насколько я могу судить по отладке, задача никогда не выполняется.

Я не уверен, потому что отладка службы Windows сильно отличается. То, как я это делаю, - это программный запуск отладчика из моего кода. Quartz.Net запускает задания в отдельных потоках, но я не уверен, что VS2010 может видеть другие запущенные потоки при отладке службы Windows.

Кто-нибудь делал то, что я пробовал раньше? Любые советы приветствуются.

PS. Я не хочу использовать собственный сервис Quartz.Net.

Ответы [ 3 ]

7 голосов
/ 11 февраля 2011

Одна из наиболее распространенных причин, по которой задание не выполняется, заключается в том, что вам необходимо вызвать метод Start () в экземпляре планировщика.

http://quartznet.sourceforge.net/faq.html#whytriggerisntfiring

Но это сложносказать, в чем проблема, если у нас нет какого-то фрагмента кода, который выполняет создание планировщика и регистрацию задания.

5 голосов
/ 22 мая 2013

Я вижу, что это немного устарело, но оно встречалось много раз в различных поисках!

Обязательно ознакомьтесь с этой статьей, в которой при создании планировщика используется конфигурация XML.http://miscellaneousrecipesfordotnet.blogspot.com/2012/09/quick-sample-to-schedule-tasks-using.html

Если вы не хотите использовать XML (динамически создаваемые задачи и т. Д.), Замените процедуру «Выполнить» из статьи выше на что-то вроде этого:

    public void Run()
    {
        // construct a scheduler factory
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

        _scheduler = schedulerFactory.GetScheduler();

        IJobDetail job = JobBuilder.Create<TaskOne>()
                .WithIdentity("TaskOne", "TaskOneGroup")
                .Build();
        ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("TaskOne", "TaskOneGroup")
        .StartNow()
        .WithSimpleSchedule(x => x.WithIntervalInSeconds(20).RepeatForever())
        .Build();
        _scheduler.ScheduleJob(job, trigger);
        _scheduler.TriggerJob(job.Key);

        _scheduler.Start();
    }

Примечание - Использование Quartz .NET 2.1.2, .NET 4

Cheers!

1 голос
/ 20 февраля 2011

Я успешно использовал Quart.NET раньше в службе Windows. Когда служба запускается, я создаю фабрику планировщиков, а затем получаю планировщик. Затем я запускаю планировщик, который неявно считывает XML-файл конфигурации, указанный в App.config службы.

Quartz.NET базовая настройка: http://quartznet.sourceforge.net/tutorial/lesson_1.html

Вопрос настройки App.config: http://groups.google.com/group/quartznet/browse_thread/thread/abbfbc1b65e20d63/b1c55cf5dabd3acd?lnk=gst&q=%3Cquartz%3E#b1c55cf5dabd3acd

...