Architektura programování aplikace služby
Poznámka:
Tento článek se nevztahuje na hostované služby v .NET. Nejnovější obsah ve službách Windows používajících Microsoft.Extensions.Hosting.BackgroundService a šablonu Pracovní služba najdete v tématech:
Aplikace služby systému Windows jsou založeny na třídě, která dědí z System.ServiceProcess.ServiceBase třídy. Přepíšete metody z této třídy a definujete pro ně funkce, které určují, jak se vaše služba chová.
Hlavní třídy, které jsou součástí vytváření služeb, jsou:
System.ServiceProcess.ServiceBase — Přepíšete metody z ServiceBase třídy při vytváření služby a definujete kód, který určuje, jak vaše služba funguje v této zděděné třídě.
System.ServiceProcess.ServiceProcessInstaller a System.ServiceProcess.ServiceInstaller – Tyto třídy použijete k instalaci a odinstalaci služby.
Kromě toho lze k manipulaci se samotnou službou použít pojmenovanou ServiceController třídu. Tato třída není zapojena do vytváření služby, ale lze ji použít ke spuštění a zastavení služby, předání příkazů do ní a vrácení řady výčtů.
Definování chování služby
Ve třídě služby přepíšete funkce základní třídy, které určují, co se stane, když se stav služby změní ve Správci řízení služeb. Třída ServiceBase zveřejňuje následující metody, které můžete přepsat pro přidání vlastního chování.
metoda | Přepsat na |
---|---|
OnStart | Uveďte, jaké akce by se měly provést při spuštění vaší služby. V tomto postupu musíte napsat kód, aby služba prováděla užitečnou práci. |
OnPause | Uveďte, co se má stát, když je služba pozastavená. |
OnStop | Uveďte, co se má stát, když služba přestane běžet. |
OnContinue | Uveďte, co se má stát, když služba po pozastavení obnoví normální fungování. |
OnShutdown | Uveďte, co by se mělo stát těsně před vypnutím systému, pokud je vaše služba v té době spuštěná. |
OnCustomCommand | Uveďte, co se má stát, když vaše služba obdrží vlastní příkaz. Další informace o vlastních příkazech najdete na webu MSDN online. |
OnPowerEvent | Uveďte, jak má služba reagovat při přijetí události řízení spotřeby, jako je nízká baterie nebo pozastavená operace. |
Poznámka:
Tyto metody představují stavy, že služba prochází během své životnosti; služba přejde z jednoho stavu na další. Například službu nikdy nedostanete, aby reagovala na OnContinue příkaz dříve OnStart , než byla volána.
Existuje několik dalších vlastností a metod, které jsou zajímavé. Tady jsou některé z nich:
Metoda Run ve ServiceBase třídě. Toto je hlavní vstupní bod služby. Při vytváření služby pomocí šablony služby systému Windows se kód vloží do metody vaší aplikace
Main
pro spuštění služby. Tento kód vypadá takto:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);
Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)
Poznámka:
Tyto příklady používají pole typu ServiceBase, do kterého lze přidat každou službu, kterou vaše aplikace obsahuje, a pak lze všechny služby spustit společně. Pokud ale vytváříte pouze jednu službu, můžete se rozhodnout, že pole nepoužijete a jednoduše deklarujete nový objekt, ze ServiceBase něhož dědí a pak ji spustíte. Příklad najdete v tématu Postupy: Zápis služeb prostřednictvím kódu programu.
Řada vlastností ve ServiceBase třídě. Tyto metody určují, jaké metody lze ve vaší službě volat. Pokud je například CanStop vlastnost nastavena na
true
, lze volat metodu OnStop ve vaší službě. Pokud je vlastnost nastavena CanPauseAndContinue natrue
, OnPause a OnContinue metody lze volat. Když nastavíte jednu z těchto vlastností natrue
, měli byste přepsat a definovat zpracování pro přidružené metody.
Můžete také použít komponentu ServiceController , která se nazývá komunikace s existující službou, a řídit chování stávající služby.