9

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を使用して、1つのコンソールアプリケーションから複数の個別のサービスを開始することは可能ですか?どうすればそれを達成できますか?

4

2 に答える 2

13

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();
    }
}
于 2014-09-16T18:06:42.660 に答える
1

現在のところ、単一の Windows サービスで複数のサービスをホストする方法はなく、この機能を実装する計画もありません。これらのサービスを監視および管理することは、この決定の主な要因の 1 つである既存のツールでは不可能です。

于 2014-01-04T15:59:49.557 に答える