首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Quartz.NET作为Windows

使用Quartz.NET作为Windows
EN

Stack Overflow用户
提问于 2013-09-23 17:47:39
回答 1查看 3.9K关注 0票数 2

我正在编写调度器组件,并计划使用Quartz.net。我的要求是:

  1. 让调度程序运行24x7 (停止/失败是可以接受的,只需要重新启动)
  2. 能够通过网页查看哪些作业/触发器被调度。
  3. 能够通过网页添加新的作业/触发器

因为我需要一个不断运行的调度程序,所以我计划有一个Windows服务。不幸的是,似乎没有任何方式让网页与运行在Windows服务中的调度程序进行交互。我试图从图兰·阿罗拉的示例中检索一个包含以下代码的实例

代码语言:javascript
复制
        NameValueCollection properties = new NameValueCollection();
        properties["quartz.scheduler.instanceName"] = "ServerScheduler";

        // set thread pool info
        properties["quartz.threadPool.threadCount"] = "0";

        // set remoting expoter
        properties["quartz.scheduler.proxy"] = "true";
        properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";

        // get a reference to the scheduler
        ISchedulerFactory sf = new StdSchedulerFactory(properties);
        IScheduler sched = sf.GetScheduler();

使用这条路径时,我会出现一个错误:“名为'ServerScheduler‘的Scheduler已经存在。”(ServerScheduler是默认的调度程序名。)经过阅读,解决方案似乎是实现一个单例模式,在调度程序的整个生命周期内实例化并返回此实例。

这似乎不是理想的解决方案,因为我想要两个部分-一个调度程序Windows服务和一个网站。显然,网站不应该拥有调度程序,因为有一件事,它可能正在使用,也可能不使用24x7,而我需要计划的作业才能执行24x7。第二,我不希望我的网站与Windows服务通信,以获得对调度程序的引用来获取这些信息。

我相信在这种情况下,我误解了使用Quartz.net的体系结构。但是,如果我是正确的,也许解决方案是维护一个关系数据存储,Quartz.net可以读取它的工作,网站也可以读取来查看正在执行的内容。无论如何,我想要一个关系数据存储来持久化作业和触发器,所以也许这是在两个应用程序之间提供数据的最好方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 04:02:43

在这种情况下,您想要做的是像您已经尝试过的那样通过远程处理进行连接,只需确保在同一台具有不同实例名称的机器上运行Quartz.NET进程。

如果您已经决定使用AdoJobStore运行,那么一个简单的选择就是从web应用程序连接到同一个作业存储区,而不实际启动调度程序。您可以从web应用程序中查询和修改作业存储作业和触发器,并让服务运行作业的实际触发。下面是一个与所描述的场景相关的答案

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18965628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档