我在 WCF 服务中使用了 Quartz.Net,效果非常好,由于 Cron 触发器,它具有很大的灵活性,基本上你可以解决大多数调度场景,当你调度触发器时,你需要指定一种实现 IJob 接口的类。在我的例子中,Execute 方法调用一个单例类/方法来完成它需要执行的工作。您可以将触发器配置为存储在 RAM(易失性)或数据库上,我认为您可以指定自定义存储,但我没有这样做。
这个问题描述了我在 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 工作,您可以在 Config 文件中配置如下设置:
<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>
-问候