4

我创建了以下内容:

  • 一个窗口服务
  • 石英调度程序类
  • 一个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 中的配置,并且在其他地方没有其他配置。

4

2 回答 2

3

您是否正在启动一个保持进程运行的线程?服务启动后,你的进程还在内存中吗?

于 2012-07-27T14:32:02.017 回答
0

我遇到了这个问题,哦,天哪,它把我逼疯了。碰巧我有一个可以随时运行的尖峰项目,但我的主要项目无法运行!

问题:我的项目的命名空间中有点/句点,例如MyProject.UpdateService我的尖峰被简单地命名为QuartzTest.

通过逐行调试发现,当我将我的 Windows 服务名称设置MyProjectUpdateService为 Quartz 作业然后注册。

TL/DR:确保您的 Windows 服务的名称中没有点。

更新:我做了更多的测试,看起来运行 Quartz 的 Windows 服务的服务名称的最大长度是 25 个字符。它不会出错 - 它只是不会启动。

于 2017-02-12T17:46:05.093 回答