Invio di richieste di dati

Per lo sviluppo di applicazioni per l'attuale ambiente operativo distribuito di Internet si richiede un sistema semplice ed efficace per il recupero di dati da risorse di tutti i tipi. I protocolli innestabili consentono di sviluppare applicazioni che utilizzano una singola interfaccia per recuperare dati da più protocolli Internet.

Per semplici transazioni di richiesta e risposta la classe WebClient rappresenta la soluzione più indicata in quanto consente l'utilizzo di vari metodi per caricare e scaricare dati da un server Internet. In WebClient sono disponibili metodi che consentono di caricare e scaricare file, inviare e ricevere flussi, inviare un buffer di dati al server e ricevere una risposta. WebClient consente di utilizzare le classi WebRequest e WebResponse per effettuare le connessioni effettive alla risorsa Internet e per rendere disponibili tutti i protocolli innestabili registrati. Nell'esempio riportato di seguito viene richiesta una pagina Web e vengono restituiti i risultati in un flusso.

WebClient myClient = new WebClient();
Stream response = myClient.OpenRead("https://www.contoso.com/index.htm");
// The stream data is used here.
response.Close();
[Visual Basic]
Dim myClient As WebClient = New WebClient()
Dim response As Stream = myClient.OpenRead("https://www.contoso.com/index.htm")
' The stream data is used here.
response.Close()

Nelle applicazioni client che consentono di effettuare transazioni più complesse si richiedono dati dai server utilizzando la classe WebRequest e le sue derivazioni. In WebRequest vengono incapsulati i dettagli della connessione al server, dell'invio della richiesta e della ricezione della risposta. WebRequest è una classe astratta che consente di definire un insieme di proprietà e metodi disponibili per tutte le applicazioni in cui si utilizzano protocolli innestabili. Le derivazioni di WebRequest, quale ad esempio HttpWebRequest, consentono di implementare le proprietà e i metodi definiti da WebRequest in modo coerente con il protocollo sottostante.

La classe WebRequest consente di creare istanze delle derivazioni di WebRequest specifiche del protocollo, utilizzando il valore dell'URI passato al proprio metodo Create per determinare la specifica istanza della classe derivata da creare. Nelle applicazioni viene indicata la derivazione di WebRequest da utilizzare per gestire una richiesta tramite la registrazione del costruttore della derivazione con il metodo WebRequest.RegisterPrefix.

La richiesta alla risorsa Internet viene inoltrata tramite una chiamata al metodo GetResponse della classe WebRequest. Con il metodo GetResponse viene creata la richiesta specifica del protocollo in base alle proprietà della classe WebRequest, viene effettuata la connessione al server tramite socket TCP o UDP e viene inviata la richiesta. Per le richieste con cui si inviano dati al server, come le richieste HTTP Post o FTP Put, il metodo WebRequest.GetRequestStream fornisce un flusso di rete per l'invio dei dati.

Tramite il metodo GetResponse viene restituito un WebResponse specifico del protocollo e corrispondente al WebRequest, come illustrato nell'esempio che segue.

WebRequest req = WebRequest.Create("https://www.contoso.com/");
WebResponse resp = req.GetResponse();
[Visual Basic]
Dim req As WebRequest = WebRequest.Create("https://www.contoso.com")
Dim resp As WebResponse = req.GetResponse()

WebResponse è anche una classe astratta che consente di definire proprietà e metodi disponibili per tutte le applicazioni in cui si utilizzano protocolli innestabili. Le derivazioni di WebResponse consentono di implementare tali proprietà e metodi per il protocollo sottostante. La classe HttpWebResponse, ad esempio, consente di implementare la classe WebResponse per il protocollo HTTP.

I dati restituiti dal server vengono presentati all'applicazione nel flusso restituito dal metodo WebResponse.GetResponseStream. È possibile utilizzare questo flusso allo stesso modo di qualsiasi altro flusso, come illustrato nell'esempio che segue.

StreamReader sr =
   new StreamReader(resp.GetResponseStream(), Encoding.ASCII);
[Visual Basic]
Dim sr As StreamReader
sr = New StreamReader(resp.GetResponseStream(), Encoding.ASCII)

Vedere anche

Accesso a Internet