我在将通过TopShelf作为服务运行的控制台应用程序中将Quartz.net与AutoFac一起使用
我按如下所示在模块中初始化Quartz
如果我将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");
});
}
...一切正常
当我查看控制台输出时,可以看到只有一个调度程序已创建并正在使用中
[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自托管服务,以便我可以通过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个调度程序,但是没有任何作用
有人知道如何阻止第二个实例的创建和激活吗?
保罗