Introduzione ai protocolli innestabili

Con Microsoft .NET Framework viene fornita un'implementazione a più livelli, estendibile e gestita, di servizi Internet che possono essere integrati nelle applicazioni in modo rapido e semplice. Le classi per l'accesso a Internet degli spazi dei nomi System.Net e System.Net.Sockets possono essere utilizzate per implementare sia applicazioni Web che Internet.

Applicazioni Internet

Le applicazioni Internet possono essere classificate in due tipi principali: applicazioni client, con cui si richiedono informazioni, e applicazioni server, con cui si risponde alle richieste di informazioni dei client. La tipica applicazione client/server di Internet è rappresentata dal Word Wide Web, in cui gli utenti utilizzano un browser per accedere a documenti e ad altri dati memorizzati nei server Web di tutto il mondo.

Le applicazioni possono anche rivestire entrambi i ruoli. Con i server applicazioni di livello intermedio, ad esempio, la risposta alle richieste dei client viene eseguita tramite una richiesta di dati ad altri server. Il server di livello intermedio svolge, in tal caso, sia la funzione di server che quella di client.

Dall'applicazione client viene inoltrata una richiesta in cui sono specificati la risorsa Internet desiderata e il protocollo di comunicazione da utilizzare per la richiesta e per la risposta. Se necessario, dal client vengono forniti ulteriori dati necessari per completare la richiesta, quali il percorso proxy o le informazioni per l'autenticazione, inclusi nome utente e password. Una volta composta, la richiesta può essere inviata al server.

Identificazione delle risorse

In .NET Framework l'identificazione della risorsa Internet e del protocollo di comunicazione richiesti avviene tramite l'URI (Uniform Resource Identifier). L'URI è costituito da tre, eventualmente quattro, frammenti: l'identificatore di schema che consente di identificare il protocollo di comunicazione per la richiesta e per la risposta, l'identificatore del server, costituito dal nome di un host DNS (Domain Name System) o da un indirizzo TCP e che consente di identificare in modo univoco il server su Internet, l'identificatore di percorso, che consente di individuare l'informazione richiesta sul server e una stringa di query facoltativa per il passaggio delle informazioni dal client al server. L'URI "http://www.contoso.com/whatsnew.aspx?date=today" è ad esempio costituito dall'identificatore di schema "http", dall'identificatore del server "www.contoso.com", dal percorso "/whatsnew.aspx" e dalla stringa di query "?date=today".

Una volta che la richiesta è stata ricevuta ed elaborata dal server, viene restituita la risposta all'applicazione client. La risposta include informazioni supplementari, come il tipo di contenuto, che può essere ad esempio testo non elaborato o dati XML.

Richieste e risposte in .NET Framework

In .NET Framework vengono utilizzate classi specifiche per fornire i tre frammenti di informazioni necessari per accedere alle risorse Internet tramite il modello basato su richiesta e risposta: la classe Uri, contenente l'URI della risorsa Internet desiderata, la classe WebRequest, contenente una richiesta per la risorsa, e la classe WebResponse, con la quale viene fornito un contenitore per la risposta in ingresso.

Nelle applicazioni client è possibile creare istanze di WebRequest passando l'URI della risorsa di rete al metodo WebRequest.Create. Questo metodo static crea una classe WebRequest per un protocollo specifico, ad esempio per HTTP. Tramite la classe WebRequest restituita viene fornito accesso alle proprietà che controllano sia la richiesta al server che l'accesso al flusso di dati inviato in seguito alla richiesta. Il metodo GetResponse della classe WebRequest invia la richiesta dall'applicazione client al server identificato nell'URI. Se si prevede che la risposta non sarà immediata, si potrà effettuare la richiesta in modo asincrono utilizzando il metodo BeginGetResponse della classe WebRequest e la risposta potrà essere restituita in seguito utilizzando il metodo EndGetResponse.

Tramite i metodi GetResponse e EndGetResponse viene restituita una classe WebResponse che fornisce l'accesso ai dati restituiti dal server. Poiché vengono forniti come flusso tramite il metodo GetResponseStream, tali dati possono essere utilizzati in un'applicazione dovunque vengano utilizzati flussi di dati.

Le classi WebRequest e WebResponse rappresentano la base dei protocolli innestabili, ovvero di un'implementazione di servizi di rete che consente di sviluppare applicazioni in cui si utilizzano risorse Internet senza curarsi dei dettagli specifici del protocollo utilizzato da ciascuna risorsa. Le classi derivate da WebRequest vengono registrate con la classe WebRequest per consentire la gestione dei dettagli delle effettive connessioni alle risorse Internet.

La classe HttpWebRequest, ad esempio, consente di gestire i dettagli della connessione a una risorsa Internet tramite HTTP. Per impostazione predefinita, quando, durante l'utilizzo del metodo WebRequest.Create, viene individuato un URI che inizia con l'identificatore del protocollo HTTP o del protocollo HTTP protetto, rispettivamente "http:" e "https:", la classe WebRequest restituita potrà essere utilizzata così com'è oppure potrà essere sottoposta a cast di tipo al fine di ottenere una HttpWebRequest che permetta di accedere alle proprietà specifiche del protocollo. Nella maggior parte dei casi la classe WebRequest fornisce tutte le informazioni necessarie per la creazione di una richiesta.

In una WebRequest è possibile utilizzare qualsiasi protocollo che possa essere rappresentato come una transazione richiesta/risposta. Da WebRequest e WebResponse è possibile derivare classi specifiche dei protocolli che potranno essere utilizzate dall'applicazione previa registrazione da effettuarsi tramite il metodo static WebRequest.RegisterPrefix.

Quando per l'evasione della richiesta Internet è richiesta l'autorizzazione del client è possibile fornire le credenziali necessarie tramite la proprietà Credentials di WebRequest. Tali credenziali possono essere costituite da una semplice coppia nome/password, per l'autenticazione classificata (digest) o HTTP base, oppure da un insieme nome/password/dominio, per l'autenticazione NTLM o Kerberos. È possibile memorizzare un insieme di credenziali in un'istanza di NetworkCredentials oppure più insiemi di credenziali contemporaneamente in un'istanza di CredentialCache. Con CredentialCache si utilizza l'URI della richiesta e lo schema di autenticazione supportati dal server per determinare quali credenziali inviare al server.

Richieste semplici con WebClient

Per le applicazioni in cui si sottopongono alle risorse Internet richieste semplici è disponibile la classe WebClient, in cui sono disponibili metodi di uso comune per il caricamento o lo scaricamento di dati da un server Internet. Per fornire l'accesso alle risorse Internet la classe WebClient si basa sulla classe WebRequest e consente pertanto di utilizzare qualsiasi protocollo innestabile registrato.

Per le applicazioni in cui non è possibile utilizzare il modello di richiesta/risposta o per le applicazioni con cui vengono sia ricevute che inviate richieste in rete è disponibile lo spazio dei nomi System.Net.Sockets, nel quale sono presenti le classi TCPClient, TCPListener e UDPClient. Tali classi, in cui è possibile utilizzare diversi protocolli di trasporto, consentono di gestire i dettagli delle connessioni di rete. Le connessioni verranno poi esposte all'applicazione come un flusso.

Gli sviluppatori che hanno dimestichezza con l'interfaccia Windows Sockets e coloro che necessitano del controllo fornito dalla programmazione a livello di socket potranno utilizzare le classi System.Net.Sockets. Le classi System.Net.Sockets rappresentano un punto di transizione dal codice gestito a quello nativo all'interno delle classi System.Net. Nella maggior parte dei casi le classi System.Net.Sockets consentono di effettuare il marshalling dei dati nelle rispettive controparti a 32 bit di Windows e di gestire i controlli di protezione eventualmente necessari.

Vedere anche

Programmazione dei protocolli innestabili | Accesso a Internet