Я использую 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 планировщик, но ничего не работает
Кто-нибудь знает, как предотвратить создание и активацию второго экземпляра?
Пол