2013-02-20 24 views
5

Come TosShelf dice:È possibile avviare più servizi da una Applicazione console da Topshelf?

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

a partire dalla versione 3.x ho bisogno di capire come integrare la nuova versione di TopShelf

. Domanda: E 'possibile iniziare più servizi separati da una sola applicazione console usando Topshelf? Come posso ottenerlo?

+0

penso che theres un pacchetto NuGet è possibile aggiungere di gestire più servizi, ma non ricordo il nome dalla parte superiore della mia testa, penso topshelf.something –

+0

sarebbe bello se si potesse :) – pencilCake

+0

"Questa caratteristica molto probabilmente tornerà sotto forma di un add su nuget. " forse non l'hanno ancora fatto? non potrei vederne uno su spiacente –

risposta

1

A partire da ora non esiste un metodo per ospitare più servizi in un singolo servizio di Windows, né sono previsti implementare questa funzionalità. Monitorare e gestire questi servizi non è possibile con gli strumenti esistenti, che è uno dei fattori principali di questa decisione.

9

Topshelf non supporta più questo, ma un possibile intervento potrebbe essere quello di implementare una classe per avviare più servizi.

Esempio:

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

La classe ServiceManager allora sarebbe solo avviare e arrestare più servizi.

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