自托管Owin应用程序创建2个Quartz计时器

时间:2019-01-27 01:29:41

标签: owin quartz-scheduler topshelf self-host-webapi

我在将通过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个调度程序,但是没有任何作用

有人知道如何阻止第二个实例的创建和激活吗?

保罗

0 个答案:

没有答案