Задание планировщика С# Quartz.net, так как служба Windows не выполняется, хотя служба окна работает

Я новичок в Topshelf и Quartz.net.

Я хочу запустить задание планировщика с помощью c #quart.net и в качестве службы Windows. Я создал службу Windows и сделал все необходимые настройки для вызова задания планировщика. Я не получаю никаких ошибок, и оконная служба успешно запущена. Но когда я помещаю точку отладки в задание планировщика, оно не выполняется, даже если время, которое я установил, истекло.

Программа.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();
    }
}

Может ли кто-нибудь помочь мне, что я делаю неправильно здесь?

Спасибо


person Mukil Deepthi    schedule 07.07.2016    source источник
comment
Вы когда-нибудь получали решение этой проблемы? У меня точно такая же проблема.   -  person Remotec    schedule 12.02.2017
comment
@RemotecUk, нет, я не нашел решения.   -  person Mukil Deepthi    schedule 13.02.2017


Ответы (2)


У меня была аналогичная проблема, и я обнаружил, что проблема НЕ в конструкторе по умолчанию.

Итак, что-то вроде этого:

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();
    }
}
person coach_rob    schedule 02.07.2018

У меня была аналогичная проблема с этим. У меня был тестовый проект, который работал, и реальный проект, который не работал.

Проблема кажется связана с длиной имени службы и/или использованием точек в имени.

Однако я не нашел ничего в исходном коде Quatrz, подтверждающего это. Из моего локального тестирования единственной разницей между работающим и неработающим сервисом было имя сервиса.

person Remotec    schedule 13.02.2017