componente commerciale .net attività di pianificazione che supporta callback o eventi
-
12-11-2019 - |
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:
- Deve essere supportato su Win XP e Win 7 (x86 + x64)
- 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
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