Nyelv

Szolgáltatásalkalmazás programozási architektúrája

Megjegyzés:

Ez a cikk nem vonatkozik a .NET-ben üzemeltetett szolgáltatásokra. A legújabb tartalmakért a Windows-szolgáltatásokkal és a Worker Service sablonnal kapcsolatban tekintse meg a következőt:

A Windows Service-alkalmazások egy olyan osztályon alapulnak, amely az System.ServiceProcess.ServiceBase osztályból örököl. Felülbírálhatja az osztály metódusait, és funkciókat határozhat meg számukra a szolgáltatás működésének meghatározásához.

A szolgáltatáslétrehozás fő osztályai a következők:

Emellett egy elnevezett ServiceController osztály is használható a szolgáltatás módosítására. Ez az osztály nem vesz részt egy szolgáltatás létrehozásában, de használható a szolgáltatás elindítására és leállítására, parancsok átadására és enumerálások sorozatának visszaadására.

A szolgáltatás viselkedésének meghatározása

A szolgáltatásosztályban felülbírálhatja az alaposztályfüggvényeket, amelyek meghatározzák, hogy mi történik, ha a szolgáltatás állapota megváltozik a Services Control Managerben. Az ServiceBase osztály a következő metódusokat teszi elérhetővé, amelyeket felülbírálhat az egyéni viselkedés hozzáadásához.

Metódus Felülbírálás a
OnStart Adja meg, hogy milyen műveleteket kell végrehajtania, amikor a szolgáltatás elindul. Ebben az eljárásban kódot kell írnia ahhoz, hogy a szolgáltatás hasznos munkát végezzen.
OnPause Jelezze, mi történjen a szolgáltatás szüneteltetésekor.
OnStop Jelezze, mi történjen, ha a szolgáltatás leáll.
OnContinue Jelezze, hogy mi történjen, ha a szolgáltatás a szüneteltetés után újra működik.
OnShutdown Jelezze, hogy mi történjen a rendszer leállása előtt, ha a szolgáltatás akkor fut.
OnCustomCommand Jelezze, mi történjen, ha a szolgáltatás egyéni parancsot kap. További információ az egyéni parancsokról: MSDN online.
OnPowerEvent Adja meg, hogyan reagáljon a szolgáltatás az energiagazdálkodási esemény érkezésekor, például alacsony akkumulátor- vagy felfüggesztett működés esetén.

Megjegyzés:

Ezek a módszerek azt jelzik, hogy a szolgáltatás az élettartama során halad át; a szolgáltatás egyik állapotról a másikra vált. Például soha nem fogja elérni, hogy a szolgáltatás válaszoljon egy OnContinue parancsra, mielőtt a OnStart parancsot meghívták volna.

Számos más tulajdonság és módszer is érdekes. Ezek a következők:

  • A(z) Run osztály ServiceBase metódusa. Ez a szolgáltatás fő belépési pontja. Amikor windowsos szolgáltatássablon használatával hoz létre szolgáltatást, a rendszer kódot szúr be az alkalmazás metódusában Main a szolgáltatás futtatásához. A kód a következőképpen néz ki:

    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)
    

    Megjegyzés:

    Ezek a példák olyan típusú ServiceBasetömböt használnak, amelybe az alkalmazás által tartalmazott összes szolgáltatás hozzáadható, majd az összes szolgáltatás együtt futtatható. Ha azonban csak egyetlen szolgáltatást hoz létre, akkor dönthet úgy, hogy nem használja a tömböt, és egyszerűen deklarál egy új, öröklő ServiceBase objektumot, majd futtatja azt. Példáért lásd: Hogyan írjunk szolgáltatásokat programozottan.

  • Egy tulajdonságsorozat a ServiceBase osztályon. Ezek határozzák meg, hogy milyen metódusok hívhatók meg a szolgáltatásban. Például, ha a CanStop tulajdonságot true értékre állítják, akkor a OnStop metódus meghívható a szolgáltatásában. CanPauseAndContinue tulajdonság beállítása esetén a true és OnPause metódusok meghívhatók. Ha az egyik ilyen tulajdonságot beállítja true, akkor felül kell bírálnia és meg kell határoznia a kapcsolódó metódusok feldolgozását.

    Megjegyzés:

    A szolgáltatásnak legalább a OnStart és a OnStop elemeket felül kell bírálnia ahhoz, hogy hasznos legyen.

A meglévő szolgáltatás viselkedésének kommunikálásához és szabályozásához használhatja a "the" ServiceController nevű összetevőt is.

Lásd még