将Quartz.NET用于项目中的多个页面/应用程序

时间:2010-10-21 14:37:26

标签: c# quartz.net

我正在创建一个利用Quartz.NET(带有ADO.NET数据库存储)的项目。有核心组件,即执行作业的组件(此时控制台应用程序将是Windows服务),以及多个Web表单,用户可以在其中添加作业和编辑作业(将数据图值编辑为特定)。

我在从所有页面访问调度程序时遇到一些问题 - 核心组件和“添加作业”页面工作正常,完全没有问题。但在其中我基本上都是这样做的:

        NameValueCollection properties = new NameValueCollection();

        properties["quartz.scheduler.instanceName"] = "schedService";
        properties["quartz.scheduler.instanceId"] = "sched1";
        properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
        properties["quartz.threadPool.threadCount"] = "10";
        properties["quartz.threadPool.threadPriority"] = "Normal";
        properties["quartz.jobStore.misfireThreshold"] = "60000";
        properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.useProperties"] = "false";
        properties["quartz.jobStore.dataSource"] = "default";
        properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
        properties["quartz.jobStore.clustered"] = "true";
        // if running MS SQL Server we need this
        properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";

        properties["quartz.dataSource.default.connectionString"] = "Data Source=CHRIS\\SQLEXPRESS;Initial Catalog=Scheduler;Integrated Security=True;Pooling=False";
        properties["quartz.dataSource.default.provider"] = "SqlServer-20";

        ISchedulerFactory schedService = new StdSchedulerFactory(properties);
        IScheduler sched = schedService.GetScheduler();

当我在编辑页面中执行相同操作时,它会通知我已经有一个名为this的调度程序。

我知道我可能正在做一些真的愚蠢的事情,但是我怎样才能在所有页面中声明调度程序以便我可以访问它们?

1 个答案:

答案 0 :(得分:1)

我自己是Quartz.Net的新手,但我猜测集群设置为'true',你需要为调度程序和实例使用唯一的名称。而且我相信你所追求的是远程。您应该只能运行一个调度程序,然后使用远程处理连接到它。

试试这个post