Я пишу компонент планировщика, и я планировал использовать Quartz.net. Мои требования:Использование Quartz.NET в качестве службы Windows
- Есть планировщик работает в режиме 24x7 (остановка/недостаток является приемлемым, он просто должен был бы начать снова)
- быть в состоянии видеть, что вакансии/спусковые планируется через веб-страницу
- Уметь добавлять новые рабочие места/триггеров через веб-страницу
Поскольку мне нужен планировщик работает постоянно, я планировал иметь службу Windows. К сожалению, похоже, что не существует способа взаимодействия веб-страниц с планировщиком, работающим в службе Windows. Я попытался получить экземпляр с помощью следующего кода вместе взятого из примеров по Turan Arora:
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
// set thread pool info
properties["quartz.threadPool.threadCount"] = "0";
// set remoting expoter
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";
// get a reference to the scheduler
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
Идя этот маршрут дает мне ошибку говоря: «Планировщик с именем„ServerScheduler“уже существует.» (ServerScheduler - это имя планировщика по умолчанию.) После некоторого чтения выяснилось, что решение заключается в реализации одноэлементного шаблона для инициализации и возврата этого экземпляра на протяжении всего жизненного цикла планировщика.
Это не похоже на идеальное решение, потому что мне нужны две части - служба Windows планировщика и веб-сайт. Очевидно, что веб-сайт не должен владеть планировщиком, потому что с одной стороны он может или не может использоваться 24x7, и мне нужно, чтобы запланированные задания могли выполнять 24x7. Во-вторых, я не думаю, что хочу, чтобы мой веб-сайт вернулся к службе Windows, чтобы получить ссылку на планировщик, чтобы получить эту информацию.
Я считаю, что я неправильно понимаю архитектуру с использованием Quartz.net в этой ситуации. Но, если я прав, возможно, решение состоит в том, чтобы поддерживать реляционное хранилище данных, которое Quartz.net может читать, чтобы получить свои рабочие места, а веб-сайт также может читать, чтобы увидеть, что выполняется. Я хочу, чтобы хранилище реляционных данных сохраняло задания и триггеры в любом случае, возможно, это лучший способ предоставить данные между двумя приложениями?
Спасибо за ваш ответ. Я изменил некоторые из моих параметров на основе информации [здесь] (http://stackoverflow.com/questions/11968884/quartz-net-use-one-windows-service-to-execute-jobs-and-two-web- applications-to/11970904 # 11970904), и он работал так, как я ожидал, подключившись к удаленному экземпляру, который был запущен. Спасибо, что подтвердили, что это путь! –