Использование Quartz.NET для нескольких страниц/приложений в проекте

Я создаю проект, использующий Quartz.NET (с хранилищем БД ADO.NET). Существует основной компонент, то есть компонент, который выполняет задания (консольное приложение на данный момент будет службой Windows), а также несколько веб-форм, где пользователи могут добавлять задания и редактировать задания (редактировать значения карты данных, чтобы быть конкретными).

У меня возникла небольшая проблема с доступом к планировщику со всех страниц - основной компонент и страница «добавить работу» работают отлично, без каких-либо проблем. Но в них я по существу делаю это в обоих:

        NameValueCollection properties = new NameValueCollection();

        properties["quartz.scheduler.instanceName"] = "schedService";
        properties["quartz.scheduler.instanceId"] = "sched1";
        properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
        properties["quartz.threadPool.threadCount"] = "10";
        properties["quartz.threadPool.threadPriority"] = "Normal";
        properties["quartz.jobStore.misfireThreshold"] = "60000";
        properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.useProperties"] = "false";
        properties["quartz.jobStore.dataSource"] = "default";
        properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
        properties["quartz.jobStore.clustered"] = "true";
        // if running MS SQL Server we need this
        properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";

        properties["quartz.dataSource.default.connectionString"] = "Data Source=CHRIS\\SQLEXPRESS;Initial Catalog=Scheduler;Integrated Security=True;Pooling=False";
        properties["quartz.dataSource.default.provider"] = "SqlServer-20";

        ISchedulerFactory schedService = new StdSchedulerFactory(properties);
        IScheduler sched = schedService.GetScheduler();

Когда я делаю то же самое на странице редактирования, он сообщает мне, что планировщик с таким именем уже существует.

Я знаю, что, вероятно, делаю что-то действительно глупое, но как я могу объявить планировщик на всех своих страницах, чтобы получить к ним доступ?


person Chris    schedule 21.10.2010    source источник


Ответы (1)


Я сам новичок в Quartz.Net, но я предполагаю, что если для кластеризации установлено значение «true», вам нужно использовать уникальные имена для планировщика и экземпляров. И я считаю, что вы получаете после удаленного взаимодействия. Вы должны иметь возможность запустить только один планировщик, а затем использовать удаленное взаимодействие для подключения к нему.

Попробуйте этот сообщение.

person jaryd    schedule 21.10.2010
comment
Спасибо, дружище, завтра попробую, потом отпишусь - person Chris; 22.10.2010
comment
Из Учебника Quartz.NET: каждый узел в кластере ДОЛЖЕН иметь уникальный идентификатор instanceId, что легко сделать (без необходимости использования различных файлов свойств), поместив AUTO в качестве значения этого свойства. - person Noah Heldman; 25.07.2012