Un bel post di Martino introduce Topshelf, libreria che in passato ho usato parecchio.
Si, ho usato e non uso più, nessun problema, semplicemente ritengo sia totalmente inutile.
Riporto di seguito il codice che ha mostrato Martino, nulla di trascendentale, un servizio e la sua fase di bootstrap.
Vediamo lo stesso codice implementato senza Topshelf
using System;
using System.ServiceProcess;
class Program : ServiceBase
{
static void Main( string[] args )
{
using (var service = new Program())
{
if (Environment.UserInteractive)
{
Console.CancelKeyPress += (s, e) => service.OnStop();
service.OnStart(args);
Console.WriteLine("\r\nPress enter key to stop program\r\n");
Console.Read();
service.OnStop();
return;
}
Run(service);
}
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
Semplice, pochi fronzoli, funziona sia in console che come servizio.
Cosa manca?
La gestione della fase dell’installazione. Gestione che io non ritengo debba far parte del nostro codice, non è una nostra responsabilità, è uno script/un installer/un deploy con octopus che devono prendersi la responsabilità i decidere come installare un servizio.
.m