我创建了以下内容:
IJob
的{{1}}实现,它包含一系列我打算通过Quartz调度程序执行的任务。Windows服务会覆盖 OnStart 以调用调度/安装类,该类尝试在Quartz中创建我想在给定时间范围内运行的单个调度任务(此时,这是例如,每30秒只需一次,以测试过程)
我在其中一个示例中使用了相同的代码来创建作业和触发器 - 触发器包含一系列代码,可以立即启动,并且每30秒重复一次。
然后我调用Worker
并最终在调度程序对象上调用Schedule()
。
我使用installutil.exe将服务推送到服务列表中,启动服务并查看我的内部日志框架,向我显示服务正在启动,正在创建调度程序并调度作业(逐行记录输出)因为我一直有问题...)问题任务不会运行一次而且不会重复。服务坐在那里愉快地运行,但从不旋转执行任何事情。
如果我使用Exists方法,传入JobKey - 它总是说错误。作业计数为零,在调度和启动调度程序后立即进行测试。
我正在使用这种方法设置IJobDetail:
Start()
并使用:
创建触发器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();
我不知道为什么会发生这种情况,事件日志中没有任何内容,服务没有任何问题,代码出现没有任何问题,因为我已经推了记录语句(在/ bin / debug中输出到txtfile)之后的每一行&amp;有很多异常处理。
有什么想法吗?通用Create上的Build()会告诉调度程序我定义的类型是sched.ScheduleJob(job, trigger);
sched.Start();
方法所在的位置吗?
修改 我从this post on SO(@ jadenedge的回答)中获取了配置部分,并将其放在了Windows服务的app.config中。这里的可能性是1.0 / 2.0不匹配?
我希望在app.config中进行配置,理想情况下,在其他地方没有其他配置。
答案 0 :(得分:2)
您是否正在启动一个保持流程运行的线程?服务启动后,您的进程是否还在内存中?
答案 1 :(得分:0)
我有这个问题,哦,男孩,它让我绝对疯狂。碰巧我有一个可以随时运行的尖峰项目,但我的主要项目不会运行!
问题:我的项目的命名空间中有点/句点,例如MyProject.UpdateService
,因为我的峰值只是命名为QuartzTest
。
逐行调试发现,当我将Windows服务名称设置为MyProjectUpdateService
时,Quartz作业就会注册。
TL / DR: 确保您的Windows服务名称中没有点。
更新:我已经做了一些测试,看起来运行Quartz的Windows服务的服务名称的最大长度是25个字符。它没有错误 - 它只是不会启动。