使用一个Windows服务执行作业,使用两个Web应用程序来安排作业

时间:2012-08-15 12:00:11

标签: windows-services quartz.net

我有一个SQL Server数据库作为作业存储,两个Web应用程序都可以调度作业,还有一个Quartz.NET Windows服务来执行作业。

我希望两个Web应用程序只安排作业,而Windows服务只是为了执行作业。

问题出现了:

如果我在两个Web应用程序和Windows服务中创建IScheduler实例,它们将同时执行作业,可能会有冲突。

如果我不在两个Web应用程序中创建IScheduler实例,如何从Web应用程序调度作业到Windows服务?

有没有办法让IScheduler只安排工作而不执行工作? (我可以将IJob程序集部署到所有这三个应用程序中)

2 个答案:

答案 0 :(得分:8)

您可能不希望在网站中实例化IScheduler实例,正是因为创建本地实例也会执行作业。

我已经实现了类似于你想要做的事情。

首先,确保在您的服务配置文件(app.config)中配置了四个密钥quartz.scheduler.exporter.typequartz.scheduler.exporter.portquartz.scheduler.exporter.bindNamequartz.scheduler.exporter.channelType。< / p>

其次,请确保您的web.config配置了以下四个密钥:quartz.scheduler.instanceNamequartz.scheduler.instanceIdquartz.scheduler.proxyquartz.scheduler.proxy.address

然后,当您创建StdSchedulerFactory()并使用它来获取调度程序时,您不是实例化新的调度程序,而是附加到现有的调度程序。然后,您可以通过远程调度程序执行任何操作,您可以使用本地操作系统执行任何操作,但只有一个实例可以执行作业。

答案 1 :(得分:1)

在配置文件中,将“quartz.threadPool.type”键设置为“Quartz.Simpl.ZeroSizeThreadPool,Quartz”。这样创建的石英调度程序可以调度/修改作业/触发器/日历,但不能运行作业。