Приложение Self Hosted Owin создает 2 кварцевых таймера

Я использую Quartz.net с AutoFac в консольном приложении, которое будет запускаться как служба через TopShelf

Я инициализирую Кварц в моем модуле, как показано ниже

Если я настрою TopShelf просто как сервис, как показано ниже..

        HostFactory.Run(x =>
        {
            x.UseAutofacContainer(_container);
            x.Service<ITaskSchedulerService>(s => //2
            {
                s.ConstructUsingAutofacContainer();
                s.WhenStarted(tc => tc.Start());
                s.WhenStopped(tc => tc.Stop());
            });
            x.SetStartTimeout(TimeSpan.FromMinutes(4));
            x.StartAutomatically();
            x.RunAsNetworkService();
            x.EnableServiceRecovery(r => { r.RestartService(0); });
            x.SetDescription("Description");
            x.SetDisplayName("Display Name");
            x.SetServiceName("Service");

        });
    }

... все отлично работает

Когда я смотрю на вывод консоли, я вижу, что только 1 планировщик был создан и используется

[01:19:02 INF] Quartz scheduler 'QuartzScheduler' initialized
[01:19:02 INF] Quartz scheduler version: 3.0.7.0
[01:19:02 INF] Scheduler QuartzScheduler_$_NON_CLUSTERED started.

Веселье начинается, когда я добавляю OWIN, я хочу, чтобы это был сервис OWIN Self Hosted, чтобы я мог взаимодействовать с ним через вызовы Web Api.

Так что, если я использую код ниже, который устанавливает OWIN...

        HostFactory.Run(x =>
        {
            x.UseAutofacContainer(_container);
            x.Service<ITaskSchedulerService>(s => //2
            {
                s.OwinEndpoint(app =>
                {
                    app.Domain = "localhost";
                    app.Port = 8083;
                });
                s.ConstructUsingAutofacContainer();
                s.WhenStarted(tc => tc.Start());
                s.WhenStopped(tc => tc.Stop());
            });
            x.SetStartTimeout(TimeSpan.FromMinutes(4));
            x.StartAutomatically();
            x.RunAsNetworkService();
            x.EnableServiceRecovery(r => { r.RestartService(0); });
            x.SetDescription("Description");
            x.SetDisplayName("Display Name");
            x.SetServiceName("Service");

        });
    }

... сейчас у меня работают 2 кварцевых планировщика одновременно, что явно нехорошо

[01:23:15 INF] Quartz scheduler 'QuartzScheduler' initialized
[01:23:15 INF] Quartz scheduler version: 3.0.7.0
[Topshelf.Owin] Starting OWIN self-host, listening on: http://localhost:8083/
[01:23:16 INF] Scheduler QuartzScheduler_$_NON_CLUSTERED started.
[01:23:16 INF] Scheduler QuartzScheduler_$_NON_CLUSTERED started.

Я пробовал все виды разных способов попробовать и только 1 планировщик, но ничего не работает

У кого-нибудь есть идеи, как предотвратить создание и активацию второго экземпляра?

Павел

0 ответов

Другие вопросы по тегам