
A mellékelt példaalkalmazás felhasználása előtt a mellékelt MailService.xml állományt el kell helyezni az alkalmazás mappájában, majd a kód 66. és 81. sorában meg kell változtatni az elérési útvonalakat. Az XML állományban meg kell adni a kiszolgáló szerver címét és az e-mail címet a megfelelő tag-ek között.
Szerviz alkalmazást a korábban ismertetett módon készíthetünk, válasszuk a File – New – Project menüpontot, majd a Visual C# Project-ből Windows Service tételt. Ekkor létrejön egy új project, benne egy Service1.cs forrás állomány, melyben megtaláljuk a szerviz alkalmazásunk osztályát, amely a ServiceBase osztályból lett származtatva.
A mellékelt példában egy olyan szerviz alkalmazást készítünk, mely a számítógép indulásakor automatikusan elindul, erről pedig egy üzenetet küld egy e-mail címre. Kihasználva azt a napjainkban népszerű szolgáltatást, miszerint egy adott postafiók tulajdonosa SMS üzenetet kap e-mail-jei érkezéséről, elegendő egy ilyen szolgáltatáshoz kapcsolódó e-mail címet megadni.
A megvalósítandó szerviz alkalmazás a kiszolgáló szerver címét és az elektronikus levél címét egy XML állományból olvassa be, így annak elérhetőnek kell lenni, valamint helyes adatokat kell tartalmaznia.
Ahhoz, hogy a szervizek indulásához valamilyen feladat elvégzését kapcsoljuk, mint jelen esetben az e-mail elküldését, felül kell írnunk a ServiceBase osztály OnStart metódusát, mely az induláskor fut le.
Egy XmlDocument osztályú objektumba beolvassuk az állományt:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:\\MailService\\MailService.xml");
A szerviz alkalmazás levélküldő funkciójának megvalósításához a System.Web.Mail névtérben található SmtpMail osztályt használjuk fel. Az objektumnak meg kell adni a kiszolgáló nevét, melyet az XML-ből veszünk:
SmtpMail.SmtpServer = xmlDoc.DocumentElement["SmtpServer"].InnerText;
Az üzenet egy MailMessage típusú adat, melynek property-jét kell feltölteni az üzenet adataival. Jelen esetben csak az üzenet címzettjét kell megadni, vagyis azt az elektronikus levélcímet, mely egy SMS-t küldő szerveren található, valamint meg kell adnunk az üzenet tárgyát, mely az SMS üzenetrésze lesz:
message.To = xmlDoc.DocumentElement["AdminMailAddress"].InnerText;
message.Subject = Environment.MachineName.ToString() + " szerver " + DateTime.Now.ToString() + " -kor elindult!";
Az üzenet tárgya két információt tesz az elküldendő karakterláncba: az első a számítógép neve, melyet a System névtér Environment osztályának MachineName statikus property-je segítségével adunk meg. A második információ a számítógép elindulásának időpontja.
Az elektronikus levél küldése az SmtpMail osztály Send metódusával történik meg:
try
{
SmtpMail.Send(message);
}
catch
{}
Az alkalmazás leállításakor végrehajtódó funkciók, például egy napló állományba írás, az OnStop metódusba kerülnek:
Stream st = File.Open("C:\\MailService\\log.txt", FileMode.OpenOrCreate);
st.Seek(0, SeekOrigin.End);
BinaryWriter bw = new BinaryWriter(st);
bw.Write(" OnStop: "+DateTime.Now.ToString());
st.Close();
Az alkalmazást felhasználás előtt telepíteni kell a többi szerviz alkalmazás közé.
A telepítés menetét megkönnyítendő válaszuk ki a „Service1.cs [Design]” lapot. A Properties ablak alsó részén látható egy „Add Installer” link, melyre kattintva létrejön a projektünkhöz egy új forrás állomány ProjectInstaller.cs névvel. Ebbe automatikusan bekerül egy ServiceProcessInstaller és egy ServiceInstaller komponens, mely segít elvégezni a telepítést, eltávolítást.
Válasszuk a serviceInstaller1 komponenst és a DisplayName property-jének adjuk értékül a _MailService szöveget. Ezzel azt érjük el, hogy a rendszer szerviz kezelő alkalmazásában a mi szervizünk _MailService névvel jelenik meg a listában elsőként.
A szerviz alkalmazás indulásának típusa háromféle lehet, melyet a ServiceInstaller osztály StartType property-jének segítségével adhatunk meg. A property egy ServiceStartMode enumerátor, melynek a következő értékeket adhatjuk meg:
| Attribútum |
Jelentés |
| Automatic |
Ezt beállítva a szerviz alkalmazás automatikusan elindul, amikor az operációs rendszer betöltődik. Amennyiben az automatikusan induló szervizhez valamilyen manuálisan indítandó szerviz kapcsolódik (függőségi viszonyban állnak), akkor az utóbbi attribútumú szerviz is elindul automatikusan. |
| Manual |
Jelzi, hogy a szerviz alkalmazás manuálisan indítható csak. Vagy egy alkalmazás teszi meg ezt a ServiceController osztály Start metódusával, vagy a Service Control Manager használatával indítjuk el mi magunk. |
| Disabled |
A szerviz alkalmazás nincs engedélyezve, vagyis a SCM (Service Control Manager)-ben „Letiltva” állapotban jelenik meg. |
Fordítsuk le az alkalmazást a Build – Build menüpont kiválasztásával. Itt most nem futtathatjuk a programot, hiszen ez egy szerviz alkalmazás, így azt csak az operációs rendszer futtathatja.
A tényleges telepítés elvégzéséhez még szükségünk lesz egy kis segédprogramra, mely része a Visual Studio.NET-nek. Ez az InstallUtil.exe lesz. Ennek kell paraméterként megadnunk a telepítendő szerviz alkalmazásunk EXE-jét elérési útvonallal. Ehhez indítsunk egy parancssort, méghozzá a Start - Programs - Microsoft Visual Studio.NET - Visual Studio.NET Tools - Visual Studio.NET Command Prompt menüponton keresztül. Erre a speciális parancssorra azért van szükség, hogy az InstallUtil alkalmazás bárhonnan elérhető legyen.
installutil C:\MailService\MailService.exe
Az elérési útvonal természetesen mindig az aktuális legyen, ahol a szerviz alkalmazásunk is található.
Ha szeretnénk eltávolítani a szervizek közül az alkalmazásunkat, akkor ismét az InstallUtil.exe segédprogramot kell használnunk. Most viszont egy /u paramétert is kell használnunk jelezve, hogy most nem telepítés, hanem eltávolítás van.
Installutil /u C:\MailService\MailService.exe