我创建了以下内容:
- 一个窗口服务
- 石英调度程序类
- 一个
IJob
名为 的实现Worker
,它包含一组我打算通过 Quartz 调度程序执行的任务。
Windows 服务覆盖OnStart以调用调度/设置类,该类尝试在 Quartz 中创建一个我想在给定时间范围内运行的计划任务(目前,这只是每 30 秒一次,例如,用于测试过程)
我使用了与其中一个示例相同的代码来创建作业和触发器 - 触发器包含一串代码,可立即启动并每 30 秒重复一次,直到永远。
然后我调用Schedule()
并最终调用Start()
调度程序对象。
我使用 installutil.exe 将服务推入服务列表,我启动服务并看到我的内部日志框架向我显示服务正在启动,正在创建调度程序并安排了作业(因为我'一直有问题...)问题是任务不会运行一次,也不会重复。该服务在那里愉快地运行,但从不启动执行任何操作。
如果我使用 Exists 方法,传入 JobKey - 它总是说假的。Jobs 的计数为零,在调度和启动调度程序后立即进行测试。
我正在使用这种方法设置 IJobDetail:
IJobDetail job = JobBuilder.Create<Worker>()
.WithIdentity("job1", "group1")
.Build();
并使用以下方法创建触发器:
TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.ForJob(job)
.StartAt(DateTime.Now)
.WithSimpleSchedule(x => x.WithIntervalInSeconds(30).WithRepeatCount(10))
.Build();
然后将其连接起来:
sched.ScheduleJob(job, trigger);
sched.Start();
我不知道为什么会发生这种情况,事件日志中没有任何内容,服务也没有任何问题,并且代码似乎运行没有任何问题,因为我已经推送了日志语句(输出到 /bin/ 中的 txtfile debug) 在每一行之后&有很多异常处理。
有任何想法吗?通用 Create 上的 Build() 是否会告诉调度程序我定义的类型是Execute()
方法所在的位置?
编辑 配置部分我从这篇关于 SO(@jadenedge 的回答)的帖子中获得,并放置在 Windows 服务的 app.config 中。1.0/2.0 不匹配的可能性?
理想情况下,我想要 app.config 中的配置,并且在其他地方没有其他配置。