
A mellékelt példa fordítása után futtassa le a mellékelt AddRegistry.reg állományt a Rendszerleíró adatbázis bejegyzéseinek elkészítéséhez.
A Smart Tag használatakor ügyelnie kell arra, hogy az alkalmazások helyes sorrendben legyenek elindítva. Elsőként a WService alkalmazást kell installálni, majd elindítani. A szerviz installálásához kapcsolódó útmutató a Szerviz készítése című szakaszban található.
A .NET Framework Remoting szolgáltatásának, osztályainak eléréséhez meg kell adnunk referenciaként a System.Runtime.Remoting névteret. Ehhez válasszuk a Project - Add reference menüpontot, majd a megjelenő ablakban a .NET lapon keressük elő a System.Runtime.Remoting elemet. A forráskódot tartalmazó állományok elején meg kell adnunk, hogy a névtér osztályai közül melyekre van szükségünk.
A példában a Smart Tag számára figyelendő szó a MEGHAJTÓK, melynek felismerésekor megjelenhet a szükséges funkciót tartalmazó menü. A Szerviz elérése menüpontban elérhetjük a Windows szervizünket, mely aktivál egy objektumot. Az objektum GetDrives metódusa segítségével egy tömbben megkaphatjuk a számítógép meghajtóinak betűjelét.
A címke meghívja a távol aktivált objektum metódusát, majd egy üzenetpanelen megjeleníti a betűket.
RObject projekt
A projekt tartalmazza a távoli objektum osztályát, mely egy metódussal rendelkezik, nevezetesen a GetDrives metódussal.
public class Drives: MarshalByRefObject
{
public string[] GetDrives()
{
return Environment.GetLogicalDrives();
}
}
Szerviz létrehozása
A szerviz alkalmazás indulásakor aktiválja az objektumot, az OnStart metódusban. Első lépésben regisztrálja a TCP csatornát. A csatorna a 9999-es port-ot használja.
TcpChannel tc = new TcpChannel(9999);
ChannelServices.RegisterChannel(tc);
Létrehozzuk a típust, majd SAO SingleCall objektumként aktiváljuk azt.
Type t = typeof(RObject.Drives); RemotingConfiguration.RegisterWellKnownServiceType(t, "GetDrives", WellKnownObjectMode.SingleCall);
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 _DriveService szöveget. Ezzel azt érjük el, hogy a rendszer szerviz kezelő alkalmazásában a mi szervizünk _DriveService névvel jelenik meg a listában elsőként.
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 <elérési út>\WService.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 <elérési út>\WService.exe
Címke létrehozása
A címke ActionClass osztályában megoldjuk, hogy a távoli objektum metódusát meghívva, megjelenjen egy üzenetpanelen a kívánt adatsor. Itt is a fent említett szoftvercsatornát használjuk, melynek segítségével elérhetjük a 9999-es porton figyelő szervizünket.
TcpChannel tc = new TcpChannel();
...
A csatorna regisztráció után itt is elérjük a Drives objektumot.
ChannelServices.RegisterChannel(tc);
dr = (Drives)Activator.GetObject(typeof(RObject.Drives), "tcp://localhost:9999/GetDrives");
Meghívjuk a metódust, mely visszaadja a tömböt. Ezt feldolgozzuk.
string[] drives = dr.GetDrives();
message = "A számítógépen a következő meghajtók találhatók:" + '\u000D';
for(int i=0;i<drives.Length;i++)
{
message += drives[i] + '\u000D';
}
Végül töröljük a csatorna regisztrációját.
ChannelServices.UnregisterChannel(tc);
...
MessageBox.Show(message);
A művelet végén megjelenik az üzenetpanel a megfelelő számú meghajtó betűjével. Ha nem érhető el a szerviz, vagy hiba történik az átvitelkor, akkor egy tájékoztató üzenet jelenik meg.