
Mellékelt példa megnyitása előtt szükséges egy HostWebClientTest nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt 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 példa két alkalmazást tartalmaz, a HostWebClientTest mappában található egy WebClientTest alkönyvtár, a kliens alkalmazás mappája. A programok külön-külön indíthatóak.
Napjaink webes fejlesztéseiben kívánatos, hogy könnyen és gyorsan használható metódusgyűjtemény álljon rendelkezésre annak megvalósítására, hogy az állományokat képesek legyünk mozgatni a kliens és a szerver oldal között az internet felhasználásával.
A Microsoft.NET olyan réteges felépítésű, kiterjeszthető és a .NET Framework által menedzselt megoldást kínál az internetes kommunikáció megvalósítására, mely alkalmazásainkba könnyen és gyorsan beépíthető. A megvalósításhoz a .NET Framework többek között a System.Net névtérben megtalálható osztályokat nyújtja annak érdekében, hogy megadja az egyszerűen használható eszközt, a programozók így a logikára koncentrálhatnak.
A WebClient osztály egy ezek közül, mely URI-val (Uniform Resource Identifiers) azonosított erőforrások letöltését, vagy elküldését teszi lehetővé.
Az internetes alkalmazásoknak két fajtája van: kliensek, melyek információkat kérnek a szerverektől, és a szerverek, melyek fogadják a kliensek kéréseit, majd kiszolgálják azt. Ennek klasszikus megvalósítása a Web, ahol a felhasználók böngészőprogramokat használnak a Web-szervereken tárolt dokumentumok és egyéb adatok elérésére.
A kliensek azonosított erőforrásokat kérnek a szerverektől, majd a protokollok használatával megkapják ezeket. Szükség esetén a kliensek autentikációval kapcsolatos információkat is küldhetnek.
A .NET Framework URI-kat használ az elérhető információk azonosítására. Ez három, esetleg négy összetevőből áll:
- Séma-azonosító, mely a kommunikációs protokollt azonosítja,
- Szerver-azonosító, mely a szervert egyértelműen azonosítja az interneten,
- Elérési út azonosító, mely megadja az erőforrás elérési útvonalát,
- Esetleg az átadott paramétereket, speciális karakterekkel szeparálva.
Ennek megfelelően egy URI a következőképpen mutat, amennyiben minden összetevőt tartalmaz: http://www.softwareonline.hu/dso/default.aspx?id=12345.
Az ilyen azonosítóval rendelkező erőforrások egyszerűen elérhetők a WebClient osztály metódusaival. Most bemutatjuk a property-ket, majd a letöltéshez szükséges metódusokat.
Elöljáróban el kell mondani, hogy a WebClient osztály a WebRequest osztályt használja az információk mozgatására. Az osztály maga nem származtatható. Alapértelmezésben a .NET Framework a http:, https:, valamint a file: séma-azonosítóval rendelkező URI-kat támogatja.

BaseAddress
Osztály: WebClient
public string BaseAddress {get; set;}
Megadható egy alapcím, melyhez le- és feltöltéskor hozzáfűzhetjük a konkrét erőforrás nevét, így nem kell mindig beírni az esetleg hosszú URI-kat.

Credentials
Osztály: WebClient
public ICredentials Credentials {get; set;}
Megadhatók a hitelesítési információk, melyek a szigorúbb hozzáférési feltételeket szabó erőforrások esetén használhatók a hozzáféréskor.

Headers
Osztály: WebClient
public WebHeaderCollection Headers {get; set;}
Ez egy, a kérés HTTP-fejlécében érkező név/érték párokat tartalmazó kollekció. Mint ismeretes, a fejléc-információkkal bizonyos utasításokat adhatunk a szervernek a kéréssel kapcsolatban.

QueryString
Osztály: WebClient
public NameValueCollection QueryString {get; set;}
A kérésben érkező (a küldés metódusától függően az URI-ban megadott, vagy HTTP fejlécben szereplő) paraméterek név/érték párjainak kollekciója. A paramétereket „?” jel választja el a címtől, és „&” jellel válnak el egymástól.

ResponseHeaders
Osztály: WebClient
public WebHeaderCollection ResponseHeaders {get;}
A válaszok HTTP-fejlécében megtalálható név/érték párok kérdezhetők le.
A WebClient osztály három egyszerűen paraméterezhető metódussal teszi lehetővé az erőforrások elérését. Ezek sorban:

DownloadData
Osztály: WebClient
public byte[] DownloadData(
string address
);
Letölti a paraméterben megadott URI-val azonosított erőforrást.
Paraméterek
string address
Az erőforrás-azonosító URI karakterlánc.
Visszatérési érték
A letöltött bináris adatokat tartalmazó byte tömb.

DownloadFile
Osztály: WebClient
public void DownloadFile(
string address,
string fileName
);
Letölti az első paraméterben megadott URI-val azonosított állományt a második paraméterben megadott helyre és névvel.
Paraméterek
string address
Az erőforrás azonosító URI.
string fileName
A célállomány neve és elérési útja.

OpenRead
Osztály: WebClient
public Stream OpenRead(
string address
);
Olvasásra megnyit egy a paraméterben megadott URI-val rendelkező erőforrást, és betölti egy Stream típusú adatfolyamba. Használat után le kell zárni az illető adatfolyamot, elkerülendő a nem-elérhető rendszererőforrásra való hivatkozásokat.
Paraméterek
string address
Az erőforrás azonosító URI.
Visszatérési érték
Az adatokat tartalmazó adatfolyam.
A mellékelt példa két alkalmazást tartalmaz: egyik egy ASP.NET alkalmazás, mely a Web-szerveren fut és ’resources’ nevű almappájában tartalmazza a Windows-os kliens-alkalmazás által letöltendő, csak olvasandó, illetve elérendő állományokat.
A HostWebClientTest Web-alkalmazás WebForm1.aspx oldaláról is letölthető a képállomány, így látható a WebClient működése Webes megoldásban.
A WebClientTest kliens-alkalmazás Form-ján három fül alatt érhetők el a műveletek. A ’pageCopy.txt letöltésre’ fülre kattintva letölthetjük az említett állományt a DownLoadFile metódus használatával: a letöltött állományt a notepad.exe programmal meg is jelenítjük, így a letöltés eredménye rögtön látható. Ehhez meg kell adnunk a fájl nevét (kiterjesztéssel), melyet az alkalmazás mappájába tölt le a program, majd meg kell nyomni a ’Letöltés’ gombot. A programban beállítottuk a WebClient objektum BaseAddress property-jét ’http://localhost/HostWebClientTest/resources/’ értékre.
Client.DownloadFile(Client.BaseAddress + "pageCopy.txt",Application.StartupPath + "\\" + placeText.Text);
...
ShellExecuteA(0, "open", "notepad.exe", Application.StartupPath + "\\" + placeText.Text, null, SW_SHOWNORMAL);
A ’pageCopy.txt olvasása’ fülre kattintva az állomány olvasásra megnyitható az OpenRead metódus használatával: a pageCopy.txt állomány beolvasható egy ListBox kontrol soraiba az ’Olvasás’ gomb lenyomásával. Egy StreamReader objektummal beolvassuk a Stream típusú objektumba mentett adatokat:
Stream strm = Client.OpenRead(Client.BaseAddress + "pageCopy.txt");
StreamReader sr = new StreamReader(strm);
string line;
line = sr.ReadLine();
while (line != null)
{
textlist.Items.Add(line);
line = sr.ReadLine();
}
strm.Close();
Az ’explorer.bmp letöltése’ fül alatt kipróbálható a DownLoadData metódus, vagyis egy explorer.bmp nevű állományt töltünk le az alkalmazás mappájába, majd ezt megjelenítjük egy PictureBox kontrolban. Ehhez deklarálunk egy byte tömböt, majd letöltjük az állományt:
byte[] imageData = new Byte[8000];
imageData = Client.DownloadData(Client.BaseAddress + "explorer.bmp");
A letöltött adatokat kiírjuk egy FileStream objektummal a megadott állományba:
FileStream fs = new FileStream(Application.StartupPath + "\\explorer.bmp",FileMode.Create,FileAccess.Write);
fs.Write(imageData,0,imageData.Length);
...
Majd egy Bitmap objektumot hozunk létre a tárolására. Végül megjelenítjük:
Bitmap bmp = new Bitmap(Application.StartupPath + "\\explorer.bmp");
imgBox.Image = bmp;