我知道quartz.net和codeplex任务调度程序管理的包装器项目。他们有一个相当不错的学习曲线和R& D阶段,以使其按照我们的规范工作。还包装他们&用我们的运行时安装程序配置是另一个问所以我们决定使用商业.NET任务调度程序。
我们的要求是:
psuedo代码示例:
Trigger mytrigger = new Trigger(Daily, "8:00am", myCallbackDelegate);
mytrigger.Start();
每天8:00将调用myCallbackDelegate指向的方法。
调度程序可以作为服务运行,也可以在每次启动引用它的应用程序时运行。 可以在表单上删除并配置为首选的.NET组件。
请提供您的建议。我用Google搜索,找不到任何可以执行此基本功能的内容。感谢
答案 0 :(得分:2)
我在WCF服务中使用了Quartz.Net并且它运行得非常好,它具有很大的灵活性,因为Cron触发器,基本上你可以解决大多数调度方案,当你安排触发器时,你需要指定实现IJob接口的类的类型。在我的例子中,Execute方法调用单例类/方法来完成它需要执行的工作。您可以将触发器配置为存储在RAM(易失性)或数据库中,我认为您可以指定自定义存储,但我没有这样做。
我在Quartz.NET中遇到的唯一问题是question,我也发布了解决方案,如果你有更具体的问题请告诉我。
这是Quartz.NET的一些配置基础知识,从教程
开始为了实例化Scheduler,你可以这样做:
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);
并且Job将是这样的
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>
-Regards