Приложение Self Hosted Owin создает 2 кварцевых таймера - PullRequest
0 голосов
/ 27 января 2019

Я использую 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 планировщик, но ничего не работает

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

Пол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...