
A program használatakor ügyelnie kell arra, hogy az alkalmazások helyes sorrendben legyenek elindítva. Elsőként a RServer alkalmazást kell elindítani.
A konfigurációnak ez a formája óriási szabadságot, és rugalmasságot ad, mely hatalmas kódolási munkától kíméli meg a fejlesztőket, ha egy alkalmazást többféle csatornahasználatra kell alkalmassá tenni. Elegendő azt szem előtt tartani, hogy az egymással kommunikáló programok ugyanazt a csatornát, és port-ot használják. Ezek a beállítások mind megtehetők a kliens-alkalmazás konfigurációs állományában is, így felhasználás előtt csak át kell írni az állományok tartalmát a kívánt adatokat megadva benne.
A konfigurációs fájl neve kliens-alkalmazás esetén is megegyezik a konfigurálandó alkalmazás teljes (kiterjesztéssel értendő) nevével, kiterjesztése pedig .CONFIG. Például a kliens-alkalmazásunk (RClient.exe) konfigurációs állománya a RClient.exe.config nevet viseli.
A mellékelt példa a múlt részben használt alkalmazás, melyben a kliens egy, a szerver aktiválta SINGLECALL objektumot ér el. Az objektum AddMethod metódusának meghívásával pedig elvégzi az összeadást a megadott számokon.
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 cikkben nem térünk ki arra, hogy miként épülnek fel az egyes projektek, hiszen a cikk előző számához képest csak a kliens-alkalmazás változott annyiban, hogy a beállításokat a létrehozott RClient.exe.config állományból olvassa ki.
RClient projekt
A kliens-alkalmazás konfigurációs állománya is hasonló felépítésű, mint a múlt részben megismert RServer.exe.config állomány. A lényeget itt is a határoló tagok között találjuk:
<configuration>
<system.runtime.remoting>
...
</system.runtime.remoting>
</configuration>
A következő szinten az <application></application> elemek találhatók, melyeknek négy lehetséges eleme lehet, de ezek közül itt csak a <channels> és értelemszerűen a <client> elemekre van szükségünk.
A <client> elemben specifikáljuk, hogy milyen típusú objektumot fogunk meghívni. A displyName attribútum megadása opcionális, azonban kliens-aktiválta objektumok (CAO) esetén az url attribútum megadása kötelező.
Lehetséges elemei <wellknown>, melynek segítségével a szerver aktiválta objektumok jellemzői specifikálhatók, és az <activated> elem, mellyel a kliens aktiválta objektumok adhatók meg. Attribútumaik:
| Elem |
Attribútum |
Magyarázat |
| <wellknown> |
displayName |
A .NET Framework Cnfiguration Tool eszközében használt név. |
| - |
type |
Meg kell adni a hívott objektum osztályának nevét, valamint az Assembly nevét egy string-ben. |
| - |
uri |
A végponti objektum URL-je (neve). Pl. http://szervernév:port/objektumnév |
| <activated> |
type |
Meg kell adni a hívott objektum osztályának nevét, valamint az Assembly nevét egy string-ben. |
A <channels> befogadó elemnek egy eleme van, ez pedig a <channel> tag. Attribútumai:
| <channel> |
ref |
Referencia egy létező csatornatípusra. |
| - |
port |
A használni kívánt port száma. |
A kliens-alkalmazás konfigurációs állománya tehát a következőképpen fest:
<configuration>
<system.runtime.remoting>
<application>
A következő szegmensben kell megadni a szerver aktiválta objektum jellemzőit, melynél egy fontos momentumra kell figyelmet fordítani: nevezetesen arra, hogy a közös kommunikációs port-számot, melynek a végén a szerver figyel, itt kell megadni az URL attribútumban. A szerver a 9001-es port-on hallgatózik, így az XML-ben a következőt kell megadnunk:
<client>
<wellknown type="RObject.RemoteObject,RObject"
url="http://localhost:9001/RServer"/>
</client>
Látható, hogy a RObject névtér RemoteObject objektumát hívjuk meg, a szerverre a RServer névvel hivatkozhatunk. A csatorna adatait a következőben adjuk meg, a port számát kinullázva:
<channels>
<channel ref="http" port="0" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
A kliens-alkalmazásban elegendő deklarálnunk a távoli objektumot:
A KAPCSOLAT gombra kattintva beolvasni a konfigurációs állomány tartalmát, és példányosítani az objektumot. Ekkor felépül a kapcsolat a két alkalmazás között:
System.Runtime.Remoting.RemotingConfiguration.Configure("RClient.exe.config");
rc = new RemoteObject();
A LEKÉRDEZÉS gombbal hívhatjuk meg az objektum metódusát:
try
{
textBox3.Text = rc.AddMethod(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
}
catch(WebException we)
{
...
}
Az alkalmazásokban tehát látható, hogy néhány soros kódolással megvalósítható a kapcsolat specifikálása, így jut elegendő időnk a hasznos logikai kidolgozására.