Panoramica sul modello di programmazione HTTP Web WCF
Il modello di programmazione HTTP Web di Windows Communication Foundation (WCF) fornisce gli elementi di base necessari per compilare servizi HTTP Web in WCF. I servizi HTTP Web di WCF sono progettati per consentire l'accesso alla tipologia più ampia di possibili client (inclusi i browser Web senza alcun framework client aggiuntivo) e sono caratterizzati dai requisiti univoci seguenti:
URI ed elaborazione di URI Gli svolgono un ruolo centrale nella progettazione dei servizi HTTP Web. Nel modello di programmazione HTTP Web di WCF vengono utilizzate le classi UriTemplate e UriTemplateTable per fornire le funzionalità di elaborazione URI.
Supporto per operazioni GET e POST I servizi HTTP Web si avvalgono del verbo GET per recuperare i dati, oltre a numerosi verbi di chiamata per modificare i dati e per chiamate remote. Nel modello di programmazione HTTP Web di WCF vengono utilizzati gli oggetti WebGetAttribute e WebInvokeAttribute per associare le operazioni del servizio sia al verbo GET che ad altri verbi HTTP, ad esempio PUT, POST e DELETE.
Più formati di dati Oltre ai messaggi SOPA, i servizi Web consentono di elaborare numerosi tipi di dati. Nel modello di programmazione HTTP Web di WCF vengono utilizzati gli oggetti WebHttpBinding e WebHttpBehavior per supportare numerosi formati di dati diversi, ad esempio documenti XML, oggetti dati JSON e flussi di contenuto binario quale immagini, file video o testo normale.
Il modello di programmazione HTTP Web di WCF estende la portata di WCF per supportare scenari di tipo Web, ad esempio servizi HTTP Web, servizi AJAX e JSON e feed ATOM/RSS. Per ulteriori informazioni su servizi AJAX e JSON, vedere Integrazione AJAX e supporto JSON. Per ulteriori informazioni su diffusione, vedere Panoramica sulla diffusione WCF.
Non sono previste restrizioni aggiuntive sui tipi di dati che possono essere restituiti da un servizio HTTP Web. Qualsiasi tipo serializzabile può essere restituito da un'operazione del servizio HTTP Web. Poiché le operazioni del servizio HTTP Web possono essere richiamate da un Web browser, esiste una limitazione per i tipi di dati che possono essere specificati in un URL. Per ulteriori informazioni sui tipi supportati per impostazione predefinita, vedere la sezione relativa a URL e parametri della stringa di query di UriTemplate riportata di seguito. È possibile modificare il comportamento predefinito fornendo l'implementazione T:System.ServiceModel.Dispatcher.QueryStringConverter che specifica come convertire i parametri specificati in un URL nel tipo di parametro effettivo. Per ulteriori informazioni, vedere QueryStringConverter
Attenzione: |
---|
I servizi creati nel modello di programmazione WCF non utilizzano messaggi SOAP. Per questo motivo le funzionalità di sicurezza disponibili in WCF non possono essere utilizzate. È tuttavia possibile implementare la sicurezza basata sul trasporto ospitando il servizio mediante HTTPS. Per ulteriori informazioni su sicurezza di WCF, vedere Cenni preliminari sulla sicurezza |
Attenzione: |
---|
L'installazione dell'estensione WebDAV per IIS può causare la restituzione di un errore HTTP 405 da parte dei servizi HTTP Web quando tramite l'estensione WebDAV viene effettuato il tentativo di gestire tutte le richieste PUT. Per risolvere questo problema è possibile disinstallare l'estensione WebDAV o disabilitarla per il sito Web. Per ulteriori informazioni, vedere IIS e WebDav |
Elaborazione di URI con UriTemplate e UriTemplateTable
I modelli URI forniscono una sintassi efficiente per esprimere grandi set di URI strutturalmente simili. Nel modello seguente, ad esempio, viene espresso il set di tutti gli URI di tre segmenti che iniziano con "a" e terminano con "c", a prescindere dal valore del segmento intermedio: a/{segment}/c
In questo modello vengono descritti URI come il seguente:
a/x/c
a/y/c
a/z/c
e così via.
In questo modello, la notazione tra parentesi graffe ("{segment}") indica un segmento variabile anziché un valore letterale.
In .NET Framework è disponibile un'interfaccia API da utilizzare con i modelli URI denominata UriTemplate. Gli oggetti UriTemplates consentono di effettuare le seguenti operazioni:
È possibile chiamare uno dei metodi Bind con un set di parametri per produrre un URI completamente chiuso che corrisponde al modello. Ciò significa che tutte le variabili all'interno del modello URI vengono sostituite con i valori effettivi.
È possibile chiamare Match() con un URI candidato che utilizza un modello per suddividere un URI candidato nelle sue parti costitutive e restituisce un dizionario che contiene le varie parti dell'URI etichettate in base alle variabili nel modello.
Bind() e Match() sono inverse, pertanto è possibile chiamare Match( Bind( x ) ) e ottenere lo stesso ambiente dal quale si è partiti.
Capita spesso (specialmente nel server in cui è necessario inviare una richiesta a un'operazione del servizio basata sull'URI) che si desideri tenere traccia di un set di oggetti UriTemplate in una struttura dati che può fare riferimento in modo indipendente a ogni modello contenuto. UriTemplateTable rappresenta un set di modelli URI e seleziona la migliore corrispondenza, dato un set di modelli e un URI candidato. Ciò non è affiliato ad alcuno stack di rete particolare (WCF incluso), pertanto è possibile utilizzarlo ovunque sia necessario.
Nel modello di servizi di WCF vengono utilizzati gli oggetti UriTemplate e UriTemplateTable per associare operazioni del servizio a un set di URI descritti da un oggetto UriTemplate. Un'operazione del servizio viene associata a un oggetto UriTemplate utilizzando l'oggetto WebGetAttribute o l'oggetto WebInvokeAttribute. Per ulteriori informazioni su su UriTemplate e UriTemplateTable, vedere UriTemplate e UriTemplateTable
Attributi WebGet e WebInvoke
I servizi HTTP Web di WCF si avvalgono di verbi di recupero (ad esempio HTTP GET) oltre a numerosi verbi di chiamata (ad esempio HTTP POST, PUT e DELETE). Il modello di programmazione HTTP WEb di WCF consente agli sviluppatori del servizio di controllare sia il modello URI che il verbo associato alle relative operazioni del servizio con gli oggetti WebGetAttribute e WebInvokeAttribute. WebGetAttribute e WebInvokeAttribute consentono di controllare l'associazione di singole operazioni con gli URI e i metodi HTTP associati a detti URI. L'aggiunta di WebGetAttribute e WebInvokeAttribute, ad esempio, nel codice seguente.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Il codice precedente consente di effettuare le richieste HTTP seguenti.
GET /GetCustomer
POST /UpdateCustomerName
L'impostazione predefinita di WebInvokeAttribute è POST ma è possibile utilizzarlo anche per altri verbi.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It“ -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Per visualizzare un esempio completo di un servizio di WCF che utilizza il modello di programmazione HTTP Web di WCF, vedere Procedura: creare un servizio HTTP Web WCF
Nome del parametro della stringa di query UriTemplate e URL.
I servizi Web possono essere chiamati da un browser Web digitando un URL associato a un'operazione del servizio. Queste operazioni del servizio possono accettare parametri della stringa di query che devono essere specificati in un formato stringa all'interno dell'URL. Nella tabella seguente vengono illustrati i tipi che è possibile passare all'interno di un URL e il formato utilizzato.
Tipo | Formato |
---|---|
0 - 255 |
|
-128 - 127 |
|
-32768 - 32767 |
|
-2,147,483,648 - 2,147,483,647 |
|
-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
|
0 - 65535 |
|
0 - 4,294,967,295 |
|
0 - 18,446,744,073,709,551,615 |
|
-3,402823e38 - 3,402823e38 (la notazione esponenziale non è obbligatoria) |
|
-1,79769313486232e308 - 1,79769313486232e308 (la notazione esponenziale non è obbligatoria) |
|
Qualsiasi carattere singolo |
|
Qualsiasi numero decimale in notazione standard (nessun esponente) |
|
True o False (senza distinzione maiuscole/minuscole) |
|
Qualsiasi stringa (la stringa null non è supportata e non viene effettuata alcuna operazione di escape) |
|
MM/GG/AAAA MM/GG/AAAA HH:MM:SS [AM|PM] Mese Giorno Anno Mese Giorno Anno HH:MM:SS [AM|PM] |
|
GG.HH:MM:SS Dove GG = Giorni, HH = Ore, MM = Minuti, SS = Secondi |
|
Un GUID, ad esempio: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
|
MM/GG/AAAA HH:MM:SS MM:SS Dove GG = Giorni, HH = Ore, MM = Minuti, SS = Secondi |
|
Enumerazioni |
Valore di enumerazione che definisce l'enumerazione come illustrato nel codice seguente.
Nella stringa di query è possibile specificare uno qualsiasi dei singoli valori di enumerazione (o i valori integer corrispondenti). |
Tipi con TypeConverterAttribute in grado di convertire il tipo in e da una rappresentazione di stringa. |
Dipende dal convertitore del tipo. |
Formati e modello di programmazione HTTP Web WCF
Nel modello di programmazione HTTP Web di WCF sono disponibili nuove funzionalità che consentono di utilizzare numerosi formati di dati diversi. A livello di associazione, WebHttpBinding è in grado di leggere e scrivere i diversi tipi di dati seguenti:
XML
JSON
Flussi binari opachi
Questo significa che il modello di programmazione HTTP WEb di WCF è in grado di gestire qualsiasi tipo di dati WEB HTTP, ma la programmazione potrebbe essere eseguita rispetto a Stream.
.NET Framework 3.5 fornisce supporto sia per i dati JSON (AJAX) che per i feed di diffusione (inclusi ATOM e RSS). Per ulteriori informazioni su queste funzionalità, vedere Formattazione di HTTP Web WCF Panoramica sulla diffusione WCF e Integrazione AJAX e supporto JSON.
Modello di programmazione HTTP Web WCF e sicurezza
Poiché il modello di programmazione HTTP Web di WCF non supporta i protocolli WS-*, l'unico modo per proteggere un servizio Web basato sul modello di programmazione HTTP Web di WCF consiste nell'esporre il servizio in HTTPS tramite SSL. Per ulteriori informazioni su configurazione di SSL con IIS 7.0, vedere Come implementare SSL in IIS (la pagina potrebbe essere in inglese).
Risoluzione dei problemi nel modello di programmazione HTTP WEb WCF
Quando si chiamano i servizi HTTP Web WCF utilizzando un oggetto ChannelFactory per creare un canale, l'oggetto WebHttpBehavior utilizza l'oggetto EndpointAddress impostato nel file di configurazione anche se un oggetto EndpointAddress viene passato all'oggetto ChannelFactory.
Vedere anche
Concetti
Modello a oggetti per la programmazione HTTP Web di WCF