![](/img/trans.png)
[英]How to fire Quartz.net job running in windows service from web application?
[英]C# Quartz.net scheduler job as windows service not executing though window service is running
我是Topshelf和Quartz.net的新手。
我想使用c#quartz.net运行调度程序作业并作为Windows服务。 我已经创建了一个Windows服务并执行了所有必要的设置来调用调度程序作业。 我没有收到任何错误,窗口服务已成功启动。 但是当我在调度程序作业中放置调试点时,即使我已经达到设置的时间也没有执行它。
Program.cs中
internal class Program
{
private static readonly IUnityContainer Container = UnityConfig.GetConfiguredContainer();
static void Main(string[] args)
{
HostFactory.Run(serviceConfig =>
{
serviceConfig.Service<ISchedulerService>(serviceInstance =>
{
serviceInstance.ConstructUsing(name => Container.Resolve<ISchedulerService>());
serviceInstance.WhenStarted(execute => execute.Start());
serviceInstance.WhenStopped(execute => execute.Stop());
});
serviceConfig.RunAsLocalSystem();
serviceConfig.SetDescription("Scheduler");
serviceConfig.SetDisplayName("Scheduler");
serviceConfig.SetServiceName("Scheduler");
serviceConfig.StartAutomatically();
});
}
}
ScheduleService.cs
public class SchedulerService : ISchedulerService
{
private readonly IScheduler _scheduler;
private readonly DateTimeOffset _startTime = new DateTimeOffset(new DateTime(2016, 05, 01, 08, 30, 00, DateTimeKind.Utc).ToLocalTime());
public SchedulerService(IScheduler scheduler)
{
_scheduler = scheduler;
}
public void Start()
{
StartScheduledJobs();
}
public void Stop()
{
_scheduler.Shutdown(true);
}
private void StartScheduledJobs()
{
try
{
SchedulePrsReportExportJob();
_scheduler.Start();
}
catch (Exception ex)
{
}
}
private void SchedulePrsReportExportJob()
{
var jobDetail = JobBuilder.Create<MyJob>()
.WithIdentity("job1", "group1")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
//.WithSchedule(CronScheduleBuilder.CronSchedule("0 1 0 ? * *")) //minute past midnight everyday
//.StartAt(_startTime)
//.WithSchedule(CronScheduleBuilder.CronSchedule("0 0/5 * ? * *")) //minute past midnight everyday
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(16, 18))
.StartNow()
.Build();
_scheduler.ScheduleJob(jobDetail, trigger);
}
}
工作
public class MyJob : IJob
{
private readonly ISomeService _service;
public ExportPrsLiveReportJob(ILogProvider logProvider, ISomeService service)
{
_service = service;
}
public async void Execute(IJobExecutionContext context)
{
var data = await _service.Get();
}
}
任何人都可以帮助我,我在这里做错了什么?
谢谢
我遇到了类似的问题。 我有一个有效的测试项目,我的实际项目不起作用。
问题似乎与服务名称的长度和/或名称中点的使用有关。
我没有在Quatrz源代码中找到任何东西来证实这一点。 从我的本地测试中,工作和非工作服务之间的唯一区别是服务名称。
我有一个类似的问题,发现没有默认构造函数是问题。
所以,像这样:
public class ExportPrsLiveReportJob : IJob
{
private readonly ISomeService _service;
public ExportPrsLiveReportJob(ILogProvider logProvider, ISomeService service)
{
_service = service;
}
public ExportPrsLiveReportJob() : this(<however your system does dependency resolution for ILogProvider and ISomeService>){
}
public async void Execute(IJobExecutionContext context)
{
var data = await _service.Get();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.