коммерческий компонент планировщика задач .net, поддерживающий обратные вызовы или события - PullRequest
2 голосов
/ 12 мая 2011

Мне известно о quartz.net и проекте управляемой программы-планировщика задач codeplex.У них достаточно приличная кривая обучения и фаза НИОКР, чтобы заставить его работать согласно нашим спецификациям.Также их упаковка и настройка с помощью нашего установщика во время выполнения - это еще одна проблема.Поэтому мы решили использовать коммерческий планировщик задач .NET.

Наши требования:

  1. Должны поддерживаться на Win XP и Win 7 (x86 + x64)
  2. Должны обеспечивать обратный вызов или событие при срабатывании триггера.

Пример псевдо-кода:

Trigger mytrigger = new Trigger(Daily, "8:00am", myCallbackDelegate);
mytrigger.Start();

Каждый день в 8:00 будет вызываться метод, указанный myCallbackDelegate.

Планировщик может работать как служба иликаждый раз, когда приложение, которое ссылается на него, запускается.Компонент .NET, который можно оставить в форме и настроить предпочтительнее.

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

1 Ответ

2 голосов
/ 12 мая 2011

Я использовал Quartz.Net в сервисе WCF, и он работал очень хорошо, он обладает большой гибкостью благодаря триггерам Cron, в основном вы можете отработать большинство сценариев планирования, когда вы планируете триггер, вынужно указать тип класса, который реализует интерфейс IJob.В моем случае методы Execute вызывают одноэлементный класс / метод, чтобы выполнить работу, которую он должен выполнить.Вы можете настроить триггеры так, чтобы они хранились в ОЗУ (энергозависимой) или базе данных, я думаю, что вы можете указать пользовательское хранилище, но я не пошел по этому пути.

Единственная проблема, с которой я столкнулся в Quartz.NET, описана в этом вопросе . Я также опубликовал решение, которое разработал, если у вас есть более конкретные вопросы, пожалуйста, дайте мне знать.

Это некоторые основы конфигурации Quartz.NET, которые в основном следуют из учебника

. Для создания экземпляра планировщика вы делаете что-то вроде этого:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
_scheduler.Start()

Для планирования заданиявы будете делать что-то вроде этого

JobDetail jobDetail = new JobDetail("UNIQUE NAME", null, typeof(NotepadJob));
SimpleTrigger triggerToReturn = new SimpleTrigger();
triggerToReturn.StartTimeUtc = DateTime.Now.ToUniversalTime();
_scheduler.ScheduleJob(jobDetail,trigger);

, и задание будет выглядеть примерно так

internal class NotepadJob : IJob
{
    //Open Notepad
}

Если при работе с SQL вы можете настроить параметры, как указано в файле конфигурации:

  <configSections>
      <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <\configSections>


<quartz>
  <add key="quartz.scheduler.instanceName" value="DefaultQuartzJobScheduler" />
  <add key="quartz.scheduler.instanceId" value="AUTO" />
  <add key="quartz.jobstore.clustered" value="true" />
  <add key="quartz.jobstore.clusterCheckinInterval" value="15000" />
  <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
  <add key="quartz.jobStore.useProperties" value="false" />
  <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
  <add key="quartz.jobStore.misfireThreshold" value="60000" />
  <add key="quartz.jobStore.dataSource" value="default" />
  <add key="quartz.dataSource.default.connectionString" value="[CONNECTION STRING]" />
  <add key="quartz.dataSource.default.provider" value="SqlServer-20" />
  <add key="quartz.threadPool.threadCount" value="10" />
</quartz>

-Regards

...