Net și c #, webrequest și webresponse clase

Mai întâi, luați în considerare clasa WebRequest:

Metode și proprietăți ale clasei WebRequest

Metode și proprietăți

Creați () și CreateDefault ()

Clasa WebRequest nu are un constructor deschis. În locul constructorului, puteți utiliza metodele statice Create () și CreateDefault () pentru a crea instanța clasei. Aceste metode nu creează de fapt un obiect de tipul WebRequest, ci un obiect nou al unei clase derivate din WebRequest, cum ar fi HttpWebRequest sau FileWebRequest.







Utilizând metoda RegisterPrefix (), puteți înregistra o clasă pentru a gestiona un protocol specific. Obiectele din această clasă vor fi create utilizând metoda WebRequest.Create (). Acest mecanism se numește "protocoale pluggable" (protocoale pluggable).

Metoda GetRequestStream () returnează un obiect de flux care poate fi folosit pentru a trimite date către server.

BeginGetRequestStream () și EndGetRequestStream ()

Accesul asincron la firul de cerere este efectuat folosind metodele BeginGetRequestStream () și EndGetRequestStream ().

Metoda GetResponse () returnează un obiect WebResponse care poate fi folosit pentru a citi datele primite de la server.

BeginGetResponse () și EndGetResponse ()

Ca și în fluxul de solicitare, există metode asincrone pentru obținerea fluxului de răspuns.

Dacă metoda BeginXX () a pornit procesarea asincronă, aceasta poate fi oprită prin metoda Abort ().

RequestUri este o proprietate read-only care returnează un URI asociat cu WebRequest. Acest URI poate fi setat în metoda statică Create () din această clasă.

Proprietatea Metoda este utilizată pentru a obține sau seta metoda pentru o anumită interogare. Obiectul HttpWebRequest acceptă metode HTTP GET, POST, HEAD și așa mai departe.

În funcție de protocolul utilizat, serverul poate fi transmis și diverse informații din anteturi pot fi obținute de la server. Informațiile din antetul de protocol sunt conținute în colecția WebHeaderCollection, care poate fi accesată prin proprietatea Anteturi.

ContentType și ContentLength

Tipul de date trimise serverului este definit în proprietatea ContentType. Pot exista diferite tipuri de date de o astfel de lungime încât datele pot fi stocate într-o matrice de octeți. Tipul de conținut definește de obicei tipul de date MIME: imagine / jpeg, imagine / gif, text / html sau text / xml.

Dacă serverul necesită autentificare de utilizator, ID-ul de utilizator poate fi setat prin proprietatea Credentiale.

Pentru protocoalele care acceptă pre-autentificarea, puteți seta proprietatea PreAuthenticate la true. În mod implicit, browserul Web încearcă mai întâi să acceseze pagina de pe site fără autentificare. Dacă site-ul web necesită autentificare, serverul răspunde că pentru utilizatorii neauthenticați accesul este refuzat. Următoarea solicitare executată de client conține informații de autentificare. Această buclă suplimentară poate fi evitată dacă setați proprietatea PreAuthenticate la true.

În proprietatea Proxy, puteți instala proxy-ul web utilizat pentru această solicitare.

În proprietatea ConnectionGroupName, puteți defini o combinație de conexiuni care ar trebui folosită cu acest obiect WebRequest.

Proprietatea Timeout specifică timpul în milisecunde care este necesar pentru un răspuns de la server. Valoarea implicită este de 100.000 ms. Dacă serverul nu răspunde în acest timp, este aruncat un WebException.

Clasa WebResponse este utilizată pentru a citi datele de pe server. Obiectul acestei clase este returnat de metoda GetResponse (), așa cum se vede în clasa WebRequest.

Metode și proprietăți ale clasei WebResponse

Metode și proprietăți

Metoda GetResponseStream () returnează un obiect de flux care este folosit pentru a citi răspunsul de la server.

Dacă obiectul de răspuns nu mai este necesar, acesta trebuie închis folosind metoda Close ().

Proprietatea Headers returnează o colecție WebHeaderCollection care include informații specifice protocolului despre anteturile returnate de pe server.







Să examinăm un mic exemplu de utilizare a acestor clase într-o aplicație WPF:

Net și c #, webrequest și webresponse clase

Protocoale conectabile

WebRequest este o clasă abstractă, astfel încât metoda WebRequest.Create () nu poate crea un obiect WebRequest - în schimb, creează un obiect al clasei derivate din WebRequest. Când trimiteți o solicitare HTTP la metoda WebRequest.Create (), este creat un obiect HttpWebRequest. Când o solicitare este trimisă cu o schemă de fișier, este creat un obiect FileWebRequest.

După cum se arată mai jos, schemele de http, https și fișiere sunt predefinite în fișierul de configurare .NET, fișierul machine.config. Fișierul de configurare poate fi găsit în \ Microsoft.NET \ Framework \\ CONFIG.

Setul de protocoale utilizate de clasa WebRequest poate fi extins programatic sau prin adăugarea unui element în fișierul de configurare. Pentru a suporta un nou protocol, altul decât http, https și schemele de fișiere, trebuie să creați o nouă clasă derivată din WebRequest, cum ar fi FtpWebRequest pentru protocolul FTP. Această clasă trebuie să suprascrie metodele și proprietățile clasei de bază și să implementeze în ele comportamentul specific protocolului. În plus, trebuie să definiți inițiativa de clasă (clasa fabrică). care creează obiecte din clasa FtpWebRequest. O astfel de clasă de inițiatori folosită de clasa WebRequest trebuie să implementeze interfața IWebRequestCreate. Să numim această clasă FtpWebRequestCreator. O instanță a acestei clase trebuie înregistrată pentru schema ftp utilizând clasa WebRequest:

Dacă acum se utilizează schema ftp cu metoda WebRequest.Create (), o nouă instanță a clasei FtpWebRequest este creată și returnată programului. Acum puteți utiliza obiectul cerere pentru a copia fișiere de pe serverul FTP și pe serverul FTP. Aici nu vom implementa clasa FtpWebRequestCreator, dar o puteți face singuri. Pentru a programa un client FTP, trebuie să utilizați clase de socket cu o conexiune TCP.

FileWebRequest și FileWebResponse

Citirea și scrierea fișierelor sau fișierelor locale pe dispozitivele partajate nu este mult diferită de citirea și scrierea fișierelor localizate pe serverele Web. Pentru a citi și scrie fișiere, utilizați clasele FileWebRequest și FileWebResponse. Cu toate acestea, multe metode și proprietăți definite în clasele de bază WebRequest și WebResponse nu sunt folosite în clasele derivate, iar în documentația MSDN ele sunt listate doar ca "rezervate pentru utilizare ulterioară".

Pentru a demonstra utilizarea posibilă a claselor FileWebRequest și FileWebResponse, este creată o aplicație WPF simplă în care puteți introduce numele fișierului pentru a fi deschis în caseta de text, după care fișierul se deschide și apare într-un câmp de text cu mai multe linii. În fișierul deschis puteți scrie un text nou:

Net și c #, webrequest și webresponse clase

Citirea din fișiere

Scrieți fișiere

Pentru a scrie date înapoi în fișier, implementăm butonul de preluare a clicurilor pentru butonul "Înregistrare". Ca și înainte, creați un obiect WebRequest trecând numele fișierului. Acum, în loc de StreamReader, folosim StreamWriter. În plus, există o altă modificare semnificativă a codului. Pentru a face stream-ul "writable", setați proprietatea Method la "PUT". În mod implicit, această proprietate are valoarea "GET", indicând faptul că fluxul poate fi citit numai:

Solicitări de pagină asincrone

Un instrument suplimentar al clasei WebRequest este capacitatea de interogare a paginilor în mod asincron. Acest instrument este esențial, deoarece poate exista o întârziere considerabilă între trimiterea unei cereri către gazdă și primirea unui răspuns. Metode precum WebClient.DownloadData () și WebRequest.GetResponse () nu vor readuce controlul până când raspunsul serverului nu este gata. Este puțin probabil să doriți să "înghetați" aplicația pentru o perioadă lungă de timp și, prin urmare, în astfel de scenarii este mai bine să utilizați metodele BeginGetResponse () și EndGetResponse ().

Metoda BeginGetResponse () funcționează asincron și readuce controlul aproape instantaneu. "În spatele scenei", timpul de execuție controlează în mod asincron firul de fundal pentru a obține un răspuns de la server. În locul returnării obiectului WebResponse, metoda BeginGetResponse () returnează un obiect care implementează interfața IAsyncResult. Cu această interfață, puteți continua lucrul sau așteptați până când răspunsul devine disponibil și apoi apelați EndGetResponse () pentru a colecta rezultatele.

De asemenea, puteți transmite un delegat de apel invers la metoda BeginGetResponse (). Scopul delegatului de apel invers ar trebui să fie o metodă care returnează void și preia referința IAsyncResult ca parametru. Când fluxul de lucru se termină cu obținerea rezultatului, timpul de execuție a apelat delegatul de apel invers pentru a informa despre oprire. Așa cum se arată în codul următor, apelarea EndGetResponse () în metoda returnării apelului vă permite să preluați un obiect WebResponse (modificați primul exemplu):

Rețineți că puteți trece acest obiect în al doilea parametru pentru a prelua obiectul original WebRequest în metoda BeginGetResponse (). Al doilea parametru este o referință la un obiect și este cunoscut ca parametru de stare. În timpul executării metodei de apel invers, același obiect de stare poate fi preluat utilizând proprietatea AsyncState a interfeței IAsyncResult.







Articole similare

Trimiteți-le prietenilor: