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.

image

image

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