Daugiau negu prieš 2 metus rašiau apie nuosavos bazinės Windows Service klasės kūrimą. Nuo to laiko visi mano kurti Windows servisai buvo daugiau mažiau panašūs. Nepaisant fakto, kad naujų Windows servisų kūrimas nėra ypatingai sudėtingas procesas, jis visada atrodė man per daug komplikuotas. Bet situacija pasikeitė kai atradau Topshelf. Ši biblioteka ženkliai supaprastina Windows servisų kūrimą bei jų valdymą. Tarkime, turime klasę MyService su metodais Start bei Stop, žemiau parodyta kaip ją galima apvilkti į Windows servisą Topshelf pagalba:

public class MyService
{
    public void Start() { /* service start logic */ }
    public void Stop() { /* service stop logic */ }
}

public class Program
{
    static void Main(string[] args)
    {
        var restartDelay = (int) TimeSpan.FromMinutes(1).TotalMinutes;

        HostFactory.Run(config =>
        {
            config.Service<MyService>(svc =>
            {
                svc.ConstructUsing(s => new MyService());
                svc.WhenStarted(s => s.Start());
                svc.WhenStopped(s => s.Stop());
            });
            config.SetServiceName("MyService");
            config.SetDisplayName("My service");
            config.SetDescription("My service via Topshelf");
            config.RunAsLocalService();
            config.DependsOnEventLog();
            config.StartAutomatically();
            config.EnableServiceRecovery(recovery => recovery.RestartService(restartDelay));
            config.UseNLog();
        });
    }
}

Kaip matote, mes nusakome ne tik kokį metodą iškviesti paleidžiant Windows servisą ar jį stabdant, bet ir kieno vardu jis bus vykdomas, nuo kokių kitų Windows servisų priklausomas, kaip yra paleidžiamas bei ką daryti jeigu servisas nulūš. Papildomai, jūsų programą galima bus paleisti tiek kaip Windows servisą, tiek iš konsolės.

Malonaus Windows servisų programavimo su Topshelf!

Patiko (0)

Rodyk draugams