如何在 Windows 服务中使用 Quartz.Net 安排任务?
Posted
技术标签:
【中文标题】如何在 Windows 服务中使用 Quartz.Net 安排任务?【英文标题】:How to schedule tasks using Quartz.Net inside a Windows Service? 【发布时间】:2011-06-24 23:31:11 【问题描述】:我在 VS 中创建了一个 Windows 服务项目,并在其中配置 Quartz.Net 以立即运行任务。注册任务的代码无异常运行,但就我的调试情况而言,任务从未执行过。
我不能确定,因为调试 Windows 服务非常不同。我这样做的方式是从我的代码中以编程方式启动调试器。 Quartz.Net 在单独的线程上运行作业,但我不确定 VS2010 在调试 Windows 服务时是否可以看到其他正在运行的线程。
以前有人做过我正在尝试的事情吗?任何提示都表示赞赏。
PS。我不想使用 Quartz.Net 自己的服务。
【问题讨论】:
这里是实现相同的分步指南:blog.nitinsawant.com/2014/10/… 【参考方案1】:作业不执行的最常见原因之一是您需要在调度程序实例上调用 Start() 方法。
http://quartznet.sourceforge.net/faq.html#whytriggerisntfiring
但是,如果我们没有某种类型的 sn-p 代码来执行调度程序创建和作业注册,就很难说问题出在哪里。
【讨论】:
【参考方案2】:我发现这有点过时了,但它在各种搜索中出现了很多次!
一定要查看这篇文章,它在实例化调度程序时使用 XML 配置。 http://miscellaneousrecipesfordotnet.blogspot.com/2012/09/quick-sample-to-schedule-tasks-using.html
如果您不想使用 XML(动态创建的任务等),请将上面文章中的“运行”过程替换为以下内容:
public void Run()
// construct a scheduler factory
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
IJobDetail job = JobBuilder.Create<TaskOne>()
.WithIdentity("TaskOne", "TaskOneGroup")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("TaskOne", "TaskOneGroup")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(20).RepeatForever())
.Build();
_scheduler.ScheduleJob(job, trigger);
_scheduler.TriggerJob(job.Key);
_scheduler.Start();
注意 - 使用 Quartz .NET 2.1.2、.NET 4
干杯!
【讨论】:
网址miscellaneousrecipesfordotnet.blogspot.com/2012/09/…不存在【参考方案3】:我之前在 Windows 服务中成功使用过 Quart.NET。当服务启动时,我创建调度器工厂,然后获取调度器。然后我启动调度程序,它隐式读取我在服务的 App.config 中指定的配置 XML。
Quartz.NET 基本设置:http://quartznet.sourceforge.net/tutorial/lesson_1.html
App.config 设置问题:http://groups.google.com/group/quartznet/browse_thread/thread/abbfbc1b65e20d63/b1c55cf5dabd3acd?lnk=gst&q=%3Cquartz%3E#b1c55cf5dabd3acd
【讨论】:
以上是关于如何在 Windows 服务中使用 Quartz.Net 安排任务?的主要内容,如果未能解决你的问题,请参考以下文章
Quartz.NET总结如何根据自己需要配置Topshelf 服务