2013-02-20 3 views
5

는 말한다 :Topshelf가 하나의 콘솔 응용 프로그램에서 여러 서비스를 시작할 수 있습니까? 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를 사용하여 하나의 콘솔 응용 프로그램에서 여러 개의 개별 서비스를 수행 할 수 있습니까?이를 수행하는 방법은 무엇입니까?

+0

은 내가 nuget 패키지는 여러 서비스를 처리하기 위해 추가 할 수 있습니다 프로그래머 생각하지만 난 "이 기능 난 당신이 –

+0

가 잘 될 것이라고 생각 topshelf.something, 내 머리 위로 떨어져 이름을 기억하지 못할 가장 가능성이 높습니다 추가 누에 늄의 형태로 돌아올 것입니다. " 아마 그들은 아직 그것을하지 않았습니까? 미안하다. – pencilCake

+0

을 :) 수 있다면 –

답변

1

현재로서는 단일 Windows 서비스에서 여러 서비스를 호스트 할 방법이 없으며 이 기능을 구현하십시오. 이러한 서비스를 모니터링하고 관리하는 것은 이러한 결정을 내리는 주요 요인 중 하나 인 기존 도구로는 불가능합니다.

9

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(); 
    } 
}