Topshelf 是否可以从一个控制台应用程序启动多个服务?

问题描述 投票:0回答:3

正如 TosShelf 所说:

"You can only have ONE service! As of 3.x Topshelf the base product no longer support hosting multiple services.

从版本 3.x 开始,我需要弄清楚如何集成新版本的 Topshelf。

问题: 是否可以使用 Topshelf 从一个控制台应用程序启动多个单独的服务?我怎样才能做到这一点?

c# .net windows-services topshelf
3个回答
12
投票

Topshelf 不再支持此功能,但可能的解决方法是实现一个类来启动多个服务。

示例:

// ServiceManager is used to start and stop multiple services
hostConfigurator.Service<ServiceManager>(s => 
{
        s.ConstructUsingNinject(); // service1 and service2 injected into ServiceManager
        s.WhenStarted(tc => tc.Start());
        s.WhenStopped(tc => tc.Stop());
});

ServiceManager 类将启动和停止多个服务。

public class ServiceManager
{
    private readonly Service1 service1;
    private readonly Service2 service2;

    public ServiceManager(Service1 service1, Service2 service2)
    {
        this.service1= service1;
        this.service2= service2;
    }

    public void Start()
    {
        service1.Start();
        service2.Start();
    }

    public void Stop()
    {
        service1.Stop();
        service2.Stop();
    }
}

1
投票

到目前为止,还没有一种方法可以在单个 Windows 服务中托管多个服务,也没有计划实现此功能。使用现有工具不可能监视和管理这些服务,这是做出此决定的主要驱动因素之一。


0
投票

我知道这是一个老问题,但可能会有所帮助。

根据 本指南,您可以使用 FluentScheduler 创建多个计划,并使用这些计划从一个 Topshelf 应用程序运行多个服务。

© www.soinside.com 2019 - 2024. All rights reserved.