
A mellékelt példa megnyitása előtt két lépést kell elvégezni, szigorúan a következő sorrendben. Első lépésben fordítsa le a példát, majd a Server projekt által generált Server.dll dinamikusan szerkeszthető könyvtárat másolja a SampleDir01 mappába. Második lépésben létre kell hozni egy SampleDir01 nevű virtuális könyvtárat, mely a példa mappájában található SampleDir01 könyvtárra mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát, és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt példában úgy demonstráljuk a kód szerverről történő futtatását, hogy a létrehozott virtuális mappában elhelyezzük a betöltendő DLL-t, majd az assembly-t dinamikusan, a System.Reflection névtér osztályainak segítségével érjük el. A Server.dll assembly található a virtuális mappában, melyre egy URL megadásával hivatkozhatunk. A kliensalkalmazásban elérjük a DLL-t, példányosítjuk az osztályt, amit az assembly névterében implementáltunk, majd használjuk az osztályban megvalósított funkciókat, jelen esetben egy dialógusablakot jelenítünk meg a hívóalkalmazásban megadott szöveggel.
A szerverként funkcionáló projekt tulajdonképpen egy Windows-os alkalmazás, melynek generált kimenete egy DLL. A Form1 osztály egy Form, melyet megjelenítünk a kliensalkalmazásban történő gombnyomásra.
A Client projektben generált EXE jeleníti meg a fent említett DLL-ben megvalósított dialógusablakot.
Ennek érdekében megadjuk, hogy milyen URL-en érhető el a DLL.
string url = "http://localhost/SampleDir01/Server.dll";
Az URL felhasználásával létrehozunk egy Assembly objektumot az Assembly osztály statikus LoadFrom metódusa segítségével, mely speciálisan ezt a célt szolgálja.
Assembly a = Assembly.LoadFrom(url);
Az Assembly osztály GetType metódusának felhasználásával lekérdezzük a Form1 osztály típusát, és létrehozunk egy Type objektumot.
Type t = a.GetType("Server.Form1");
Az Activator osztály statikus CreateInstance metódusával létrehozunk egy példányt a Form1 osztályból, mintha csak a kliensalkalmazás saját mappájában lenne megtalálható a hívott DLL.
A Form1 osztályt úgy példányosítjuk, hogy meghívjuk az általunk definiált konstruktorát, melynek paraméterként átadjuk a kliensalkalmazás szövegmezőjében megadott szöveget. Így érhetjük el, hogy a szerver a kívánt szöveget jelenítse meg futáskor a TextBox kontrolban.
public Form1(string text)
{
InitializeComponent();
textBox1.Text = text;
}
A példányosítás úgy történik, hogy egy objektum-tömbben adjuk át a paramétert.
Object o = Activator.CreateInstance(t,new object[]{textBox1.Text});
A dialógusablak megjelenítése az osztály Show metódusával történik. A metódus meghívásához létre kell hoznunk egy MethodInfo objektumot.
MethodInfo mi = t.GetMethod("Show");
A metódus meghívása a MethodInfo osztály - MethodBase osztályból - örökölt Invoke metódusának meghívásával lehetséges. A metódusnak át kell adni első paraméterként az objektumot, mely a metódust implementálja, második paraméterben pedig a meghívandó metódus paramétereit egy object[] tömbben.
A paraméterlista most NULL, mert a metódusnak nincs paramétere.
A Web-ről futtatott assembly-ben implementált dialógusablak osztályában eseménykezelők is deklarálhatók.