Kezdőlap > Kategorizálatlan > Windows Communication Foundation – PerformanceCounter Server

Windows Communication Foundation – PerformanceCounter Server

2008. június 5. csütörtök Hozzászólás Go to comments

A feladatunk annyi lesz, hogy egy olyan kliens és szerveralkalmazást fogunk elkészíteni, amelynél a szerver az adott gép processzor kihasználtság adatait küldi a kliensnek. Ezt a kliens fogadja, és grafikonszerűen kirajzolja képernyőre. Így lesz egy olyan alkalmazásunk, melynek segítségével bárhonnan távolról felügyelhetjük, hogy mennyire van kihasználva az adott számítógép.

A szerveralkalmazás fogja az adatokat lekérdezni, és majd ha a kliensnek szüksége van ezekre az adatokra akkor el fogja neki küldeni.

clip_image002Indítsuk el a Visual Studio 2008-at rendszergazdai módban, majd a válasszuk ki a File -> New -> Project… menüpontot és a megjelenő ablakban válasszuk ki a templatek közül a Console Application –t. A neve legyen például: ProcessorPerfServer, majd kattintsunk az OK gombra. Ahhoz, hogy használni tudjuk a WCF-et szükségünk lesz a System.ServiceModel névtérre. Ehhez kattintsunk jobb egérgombbal a Solution Explorerben a References-re és válasszuk ki a megjelenő helyi menüből az Add Reference menüpontot. A megjelenő ablakban a .NET fül alatt keressük ki a System.ServiceModel –t majd jelöljük ki és kattintsunk az OK gombra. Ha ezzel megvagyunk, adjunk a Solution -ünkhöz egy osztályt. Kattintsunk jobb egérgombbal a Solution Explorerben a project nevén a megjelenő helyi menüben válasszuk ki az Add menüpontot, majd Class… menüpontot. A megjelenő ablakban adjuk meg az osztály nevét, amely most legyen például a GetData.cs . Ha ezzel megvagyunk, látunk egy üres osztály, ezt követően adjuk, hozzá a System.ServiceModel névteret az osztályunkhoz ( using System.ServiceModel; )

Az osztályunknak így kell kinéznie:

image

Ahhoz, hogy lekérdezzük a processzor használatot, szükségünk lesz a System.Diagnostics névtérre. (using System.Diagnostics). Az osztályban példányosítsunk egy PerformaceCounter objektumot, amelynek paraméteréül adjuk át a lentebb látható ábra szerint a paramétereket. Ez azért kell, hogy a megfelelő információt el tudjuk kérni az adott géptől.

image

Most adjunk az osztályunkhoz egy GetProcessorPerf nevű metódust amelynek a visszatérési értéke float típusú legyen. A metódus törzsébe pedig írjuk a következőt: perf.NextValue(); Ezzel lekérdezzük az ép aktuális használtsági adatot. Ez a kérés mindig csak akkor fog végrehajtódni, ha a kliens hívni fogja a servert a szükséges adatért.

Az osztályunknak így kell kinéznie:

image

Most már csak az osztályt a megfelelő attribútummal kell ellátni. Az osztályt a [ServiceContract] attribútummal kell ellátni ezáltal létrehozzuk a szolgáltatásszerződést, amely a szolgáltatás által publikált műveleteket definiálja. A GetProcessorPerf metódust pedig egy [OperationContract] attribútummal. Így ez a metódus a szolgáltatás szerződésünk részévé válik. Minden szolgáltatásszerződésnek legalább egy műveletszerződést meg kell valósítania.

Tehát a GetData osztály így fog kinézni:

image

Ezt követően nincs más dolgunk csak felkészíteni az alkalmazást arra, hogy szolgáltatásként üzemeljen. Térjünk vissza a Program.cs –be, és itt is adjuk, hozzá a System.ServiceModel névteret.

Ahhoz, hogy publikáljunk egy szolgáltatást és a hozzá tartozó végpontot ahhoz három dologra van szükségünk az ABC-re. Azaz Address-re a Binding-ra és a Contract-ra. Az address egy egyszerű URI típusú cím, a binding határozza meg a kapcsolatot, amely jelen esetben TCP alapú lesz, a szerződés meg a műveleteket, amiket majd végrehajthatunk.

Mivel most olyan szerveralkalmazást készítünk, ami a helyi gépen fog futni ezért érdemes NetNamedPipeBindingot választanunk, amely erre a helyzetre tökéletes megoldást kínál.

A megvalósításhoz szükségünk lesz egy Uri típusú címre, melynek paraméteréül átadjuk azt a címet, amelyen keresztül majd a szolgáltatásunkat el fogjuk érni. Jelen esetben a net.pipe://localhost/PerfCounter lesz. A net.pipe különleges hisz ez csak akkor kell, ha NetPipeBindingot választunk. Példányosítanunk kell egy ServiceHost objektumot, amelynek paraméterül át kell adnunk a szerződés osztály típusát, és a címet. Most már kész a szolgáltatás, de még a szolgáltatásnak nincs végpontja, amit publikáljon a külvilág felé, ezért meghívjuk a példányosított ServiceHost AddServicePoint metódusát, amelynek segítségével már publikálhatunk egy szolgáltatás végpontot. Paraméterül pedig adjuk át az ABC –t. Azaz a szerződést, a kötést és a címet. Ha ezzel megvagyunk nincs más dolgunk, mint elindítani a szoláltatást az srv.Open(); metódus meghívásával. Hogy lássuk, hogy mikor indul el a szolgáltatást néhány segéd szöveget kiírathatunk magunknak. A Console.ReadLine(); -al pedig megakadályozzuk, hogy az alkalmazásunk ne álljon le rögtön.

A Program.cs osztálynak tehát így kell kinéznie:

image

Ezzel kész is a szolgáltatásunk, már csak egy apróság vanclip_image002[4] hátra, mégpedig a konfigurációs állomány. Kattintsunk a Solution Explorerben a project nevére jobb egérgombbal majd vállaszuk ki az Add menü New Item menüpontját és a megjelenő ablakban válasszuk ki az Application Configuration File templatet. A neve maradhat App.config. Majd másoljuk be a következő beállításokat.

Megj: http bindingok esetén, ha beírjuk a szolgáltatásunk címét a böngészőbe, és nem adtuk hozzá a konfigurációs állományt, akkor a rendszer felajánl egy app.config sablont, amely szinte tökéletesen megfelel nekünk.

image

App.config megjegyzés:

Amit fontos megjegyezni a konfigurációs állományból:
A name tag meg kell egyezzen a project névterével valamint a szolgáltatás szerződés osztály nevével is. Figyeljünk oda, hogy pontosan írjuk be, ugyanis a rendszer a kis és nagybetűk között különbséget tesz.

image

Ha kész a szolgáltatásunk ezt el kell érnünk majd a kliensből, de ezelőtt meg kell hogy kapja a szerződés leírását. Hogy kapja meg a szerződés kódját a kliens? Erre több lehetőség is van, ezek közül a MetaDataExchange a legegyszerűbb. MetaDataExchange – meta adatcsere végpont. Egy adott címen letölthetővé válnak a szolgáltatás megvalósításának elemei. Visual Studio 2008-ból az Add Service Reference szolgáltatással hívható meg. Ez a sor az app.configban azt teszi számunkra lehetővé, hogy a lehető legegyszerűbb módon megkaphassa a kliens a szolgáltatás szerződést.

image

Mivel jelen esetben NetPipBindingot választottunk, kell egy http cím, amin keresztül a kliens lekéri a szolgáltatásszerződést. Ez legtöbbször egy http cím, de lehet https is. Az alábbi sor ezt tartalmazza.

image

Ha mindezzel megvagyunk, fordítsuk le az alkalmazásunkat és ha sikeresen lefordul, indítsuk el.

Figyelem! Ha esetleg hibát kapnánk a szolgáltatás elindításánál, arra hivatkozva, hogy nincs hozzá jogosultságunk. Bizonyosodjunk meg arról, hogy rendszergazdai módban indítottuk el a visual studiot, és hogy esetleg bizonyos tűzfal programok nem akadályozzák a szolgáltatás futását.

clip_image002[6]

Reklámok
Kategóriák:Kategorizálatlan
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: