Domanda

Sono a conoscenza quartz.net e il progetto Wrapper gestito da CodePlex Task Scheduler. Hanno una curva di apprendimento piuttosto decente e una fase di ricerca e sviluppo per farlo funzionare secondo le nostre specifiche. Anche imballarli e configurare con il nostro installatore di runtime è un altro problema. Quindi abbiamo deciso di andare con uno scheduler di attività .NET commerciale.

I nostri requisiti sono:

  1. Deve essere supportato su Win XP e Win 7 (x86 + x64)
  2. Deve fornire un callback o un evento quando viene licenziato il trigger.

Esempio di codice psuedo:

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

Ogni giorno alle 8:00 verrà chiamato il metodo indicato da MyCallbackDelegate.

Lo Scheduler può essere eseguito come servizio o ogni volta che l'app a cui fa riferimento viene avviata. Componente .NET che può essere eliminato sul modulo e configurato preferito.

Fornisci i tuoi consigli. Ho cercato su Google e non riesco a trovare nulla che farà questa funzionalità di base. Grazie

È stato utile?

Soluzione

Ho usato quartz.net in un servizio WCF e ha funzionato davvero bene, ha molta flessibilità a causa dei trigger di Cron, in pratica puoi elaborare la maggior parte degli scenari di programmazione, quando si pianifica un trigger, è necessario specificare Un tipo di classe che implementa l'interfaccia ijob. Nel mio caso i metodi Execute chiama una classe/metodo singleton per svolgere il lavoro che deve svolgere. È possibile configurare i trigger da archiviare su RAM (volatile) o un database, penso che tu possa specificare una memoria personalizzata ma non sono andato in quel modo.

L'unico problema che ho avuto con quartz.net è descritto in questo domanda, Ho anche pubblicato la soluzione che ho elaborato, se hai domande più specifiche per favore fatemelo sapere.

Questa è alcune delle basi di configurazione di quartz.net mostamente seguite dal tutorial

Per istanziare lo scheduler fai qualcosa del genere:

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

Per programmare un lavoro farai qualcosa del genere

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

E il lavoro sarà qualcosa del genere

internal class NotepadJob : IJob
{
    //Open Notepad
}

Se Wokring con SQL è possibile configurare le impostazioni come seguito nel file di configurazione:

  <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>

-Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top