Modello a oggetti per la programmazione HTTP Web di WCF
Il modello di programmazione HTTP Web di WCF consente agli sviluppatori di esporre servizi Web WCF (Windows Communication Foundation) tramite richieste HTTP di base, senza la necessità di usare SOAP. Il modello di programmazione HTTP WEB WCF si basa sul modello di estendibilità WCF esistente. Definisce le classi seguenti:
Modello di programmazione:
Infrastruttura del dispatcher e dei canali:
classi di utilità e punti di estendibilità:
AspNetCacheProfileAttribute
L'attributo AspNetCacheProfileAttribute, quando applicato a un'operazione di servizio, indica il profilo della cache di output ASP.NET nel file di configurazione che deve essere usato per memorizzare nella cache le risposte dall'operazione nella cache di output ASP .NET. Questa proprietà accetta solo un parametro, il nome di profilo cache che specifica le impostazioni della cache nel file di configurazione.
WebGetAttribute
L'attributo WebGetAttribute viene usato per contrassegnare un'operazione del servizio come operazione che risponde alle richieste HTTP GET. Si tratta di un comportamento di operazione passivo (i metodi IOperationBehavior non eseguono alcuna operazione) che aggiunge metadati alla descrizione dell'operazione. L'applicazione di WebGetAttribute non alcun effetto, a meno che alla raccolta dei comportamenti del servizio non venga aggiunto un comportamento che cerca questi metadati nella descrizione dell'operazione (in particolare, WebHttpBehavior). L'attributo WebGetAttribute accetta i parametri facoltativi indicati nella tabella seguente.
Parametro | Descrizione |
---|---|
BodyStyle |
Controlla se eseguire il wrapping delle richieste e delle risposte inviate e ricevute dall'operazione del servizio a cui è applicato l'attributo. |
RequestFormat |
Controlla la modalità di formattazione dei messaggi di richiesta. |
ResponseFormat |
Controlla la modalità di formattazione dei messaggi di risposta. |
UriTemplate |
Specifica il modello di URI che controlla le richieste HTTP mappate all'operazione del servizio a cui è applicato l'attributo. |
WebHttpBinding
La classe WebHttpBinding incorpora il supporto per XML, JSON e i dati binari non elaborati usando l'elemento WebMessageEncodingBindingElement. La classe è costituita da un oggetto HttpsTransportBindingElement, HttpTransportBindingElement e da un oggetto WebHttpSecurity. La classe WebHttpBinding è progettata per essere usata insieme a WebHttpBehavior.
WebInvokeAttribute
L'attributo WebInvokeAttribute è simile a WebGetAttribute, ma viene usato per contrassegnare un'operazione del servizio come operazione che risponde alle richieste HTTP diverse da GET. Si tratta di un comportamento di operazione passivo (i metodi IOperationBehavior non eseguono alcuna operazione) che aggiunge metadati alla descrizione dell'operazione. L'applicazione di WebInvokeAttribute non alcun effetto, a meno che alla raccolta dei comportamenti del servizio non venga aggiunto un comportamento che cerca questi metadati nella descrizione dell'operazione (in particolare, WebHttpBehavior).
L'attributo WebInvokeAttribute accetta i parametri facoltativi indicati nella tabella seguente.
Parametro | Descrizione |
---|---|
BodyStyle |
Controlla se eseguire il wrapping delle richieste e delle risposte inviate e ricevute dall'operazione del servizio a cui è applicato l'attributo. |
Method |
Specifica il metodo HTTP a cui è mappata l'operazione del servizio. |
RequestFormat |
Controlla la modalità di formattazione dei messaggi di richiesta. |
ResponseFormat |
Controlla la modalità di formattazione dei messaggi di risposta. |
UriTemplate |
Specifica il modello di URI che controlla quali richieste GET vengono mappate all'operazione del servizio a cui è applicato l'attributo. |
UriTemplate
La classe UriTemplate consente di definire un set di URI strutturalmente simili. I modelli sono composti di due parti, un percorso e una query. Un percorso è costituito da una serie di segmenti delimitati da una barra (/). Ogni segmento può avere un valore letterale, un valore variabile (scritto tra parentesi graffe [{}], che deve corrispondere al contenuto di un solo segmento) o un carattere jolly (scritto come asterisco [*], che corrisponde al "resto del percorso") che deve essere visualizzato alla fine del percorso. L'espressione di query può essere interamente omessa. Se presente, specifica una serie non ordinata di coppie nome/valore. Gli elementi dell'espressione di query possono essere coppie letterali (?x=2) o coppie variabili (?x={value}). Non è consentito usare valori non abbinati. L'oggetto UriTemplate viene usato internamente dal modello di programmazione HTTP Web di per eseguire il mapping di URI o gruppi di URI specifici a operazioni del servizio.
UriTemplateTable
La classe UriTemplateTable rappresenta un set associativo di oggetti UriTemplate associati a un oggetto scelto dallo sviluppatore. Consente di confrontare gli URI (Uniform Resource Identifier) candidati con i modelli del set e recuperare i dati associati ai modelli corrispondenti. L'oggetto UriTemplateTable viene usato internamente dal modello di programmazione HTTP Web di per eseguire il mapping di URI o gruppi di URI specifici a operazioni del servizio.
WebServiceHost
WebServiceHost estende ServiceHost per semplificare l'host di un servizio Web non SOAP. Se WebServiceHost non trova endpoint nella descrizione del servizio, crea automaticamente un endpoint predefinito all'indirizzo di base del servizio. Quando viene creato un endpoint HTTP predefinito, WebServiceHost disabilita anche la pagina della Guida HTTP e la funzionalità WSDL (Web Services Description Language) GET, in modo che l'endpoint dei metadati non interferisce con l'endpoint HTTP predefinito. L'oggetto WebServiceHost assicura inoltre che tutti gli endpoint che usano WebHttpBinding siano collegati all'oggetto WebHttpBehavior necessario. Infine, WebServiceHost configura automaticamente l'associazione dell'endpoint per usare le impostazioni di sicurezza IIS (Internet Information Services) associate in caso di uso in una directory virtuale protetta.
WebServiceHostFactory
La classe WebServiceHostFactory viene usata per creare un WebServiceHost in modo dinamico, quando un servizio viene ospitato in IIS (Internet Information Services) o WAS (Windows Process Activation Service). A differenza dei servizi indipendenti, in cui l'applicazione host crea un'istanza di WebServiceHost, i servizi ospitati in IIS o WAS usano questa classe per creare l'oggetto WebServiceHost per il servizio. Il metodo CreateServiceHost(Type, Uri[]) viene chiamato quando viene ricevuta una richiesta in ingresso per il servizio.
WebHttpBehavior
La classe WebHttpBehavior fornisce, tra gli altri, i formattatori e i selettori di operazioni necessari per il supporto del servizio web a livello di modello di servizio. La classe viene implementata come un comportamento dell'endpoint (usato insieme con WebHttpBinding) e consente di specificare formattatori e selettori di operazioni per ogni endpoint, consentendo alla stessa implementazione del servizio di esporre endpoint SOAP e POX.
Estensione di WebHttpBehavior
WebHttpBehavior è estendibile usando diversi metodi virtuali: GetOperationSelector(ServiceEndpoint), GetReplyClientFormatter(OperationDescription, ServiceEndpoint), GetRequestClientFormatter(OperationDescription, ServiceEndpoint), GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint) e GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint). Gli sviluppatori possono derivare una classe da WebHttpBehavior ed eseguire l'override di questi metodi per personalizzare il comportamento predefinito.
L'oggetto WebScriptEnablingBehavior è un esempio di estensione di WebHttpBehavior. WebScriptEnablingBehavior consente agli endpoint di Windows Communication Foundation (WCF) di ricevere richieste HTTP da un client AJAX basato su browser ASP.NET. Il servizio AJAX che usa HTTP POST è un esempio di uso di questo punto di estendibilità.
Avviso
Quando si usa WebScriptEnablingBehavior, non è supportato l'uso di UriTemplate all'interno di attributi WebGetAttribute o WebInvokeAttribute.
WebHttpDispatchOperationSelector
La classe WebHttpDispatchOperationSelector usa le classi UriTemplate e UriTemplateTable per inviare chiamate alle operazioni del servizio.
Compatibilità
Il modello di programmazione HTTP Web di WCF non usa messaggi basati su SOAP e pertanto non supporta i protocolli WS-*. È tuttavia possibile esporre lo stesso contratto tramite due endpoint diversi, di cui uno usa SOAP e l'altro no. Vedere Procedura: Esporre un contratto ai client SOAP e Web per un esempio.
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 tramite SSL. Per altre informazioni sulla configurazione di SSL con IIS 7.0, vedere Come implementare SSL in IIS.