Panoramica del modello di programmazione Web WCF

Il modello di programmazione Web fornisce gli elementi basilari del framework richiesti per creare servizi Web con Windows Communication Foundation (WCF). I servizi Web sono progettati per consentire l'accesso alla tipologia più ampia di possibili client (inclusi i browser Web senza alcun framework client aggiuntivo) e hanno i requisiti univoci seguenti:

  • URI ed elaborazione di URI. Gli URI svolgono un ruolo centrale nella progettazione di servizi Web. Il modello di programmazione Web WCF utilizza le classi UriTemplate e UriTemplateTable per fornire funzionalità di elaborazione di URI.
  • Supporto per operazioni GET e POST. I servizi Web si avvalgono del verbo GET per recuperare i dati, oltre a numerosi verbi di chiamata per modificare i dati e per chiamate remote. Il modello di programmazione Web utilizza WebGetAttribute e WebInvokeAttribute per associare operazioni del servizio a verbi GET e POST.
  • Formati dati multipli. I servizi Web elaborano numerosi tipi di dati oltre ai messaggi SOAP. Il modello di programmazione Web utilizza WebHttpBinding e WebHttpBehavior per supportare numerosi formati dati diversi, inclusi documenti XML, oggetto dati JSON e flussi di contenuto binario quali immagini, file video o testo normale.

Il modello di programmazione Web estende la portata di WCF per coprire scenari Web che includono servizi REST, AJAX, JSON e feed di diffusione (ATOM/RSS). Per ulteriori informazioni sui servizi AJAX e JSON, vedere Integrazione AJAX e supporto JSON. Per ulteriori informazioni sulla diffusione, vedere Panoramica sulla diffusione WCF.

Elaborazione di URI con UriTemplate e UriTemplateTable

I modelli URI forniscono una sintassi efficiente per esprimere grandi insiemi di URI strutturalmente simili. Nel modello seguente, ad esempio, viene espresso l'insieme di tutti gli URI di tre segmenti che iniziano con "a" e terminanon 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.

.NET Framework 3.5 fornisce una nuova API per l'utilizzo di modelli URI denominati UriTemplate. UriTemplates consentono di effettuare le operazioni seguenti:

  • È possibile chiamare uno dei metodi Bind con un insieme 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 insieme di oggetti UriTemplate in una struttura dati che può fare riferimento in modo indipendente a ogni modello contenuto. UriTemplateTable rappresenta un insieme di modelli URI e seleziona la migliore corrispondenza, dato un insieme di modelli e un URI candidato. Ciò non è affiliato ad alcuno stack di rete particolare (WCF incluso), pertanto è possibile utilizzarlo ovunque sia necessario.

Il modello di servizio WCF si avvale di UriTemplate e UriTemplateTable per associare operazioni del servizio a un insieme di URI descritti da un UriTemplate. Un'operazione del servizio viene associata a un UriTemplate, utilizzando WebGetAttribute o WebInvokeAttribute.

Parametri dell'operazione del servizio 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 prendere parametri 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

Byte

0 - 255

SByte

-128 - 127

Int16

-32768 - 32767

Int32

-2.147.483.648 - 2.147.483.647

Int64

-9.223.372.036.854.775.808 - 9.223.372.036.854.775.807

UInt16

0 - 65535

UInt32

0 - 4.294.967.295

UInt64

0 - 18.446.744.073.709.551.615

Single

-3,402823e38 - 3,402823e38 (la notazione esponenziale non è obbligatoria)

Double

-1,79769313486232e308 - 1,79769313486232e308 (la notazione esponenziale non è obbligatoria)

Char

Qualsiasi carattere singolo

Decimal

Qualsiasi decimale in notazione standard (nessun esponente)

Boolean

True o False (senza distinzione maiuscole/minuscole)

String

Qualsiasi stringa (la stringa null non è supportata e non viene effettuata alcuna operazione di escape)

DateTime

MM/GG/AAAA

MM/GG/AAAA HH:MM:SS [AM|PM]

Mese Giorno Anno

Mese Giorno Anno HH:MM:SS [AM|PM]

TimeSpan

GG.HH:MM:SS

Dove GG = Giorni, HH = Ore, MM = Minuti, SS = Secondi

Guid

Un GUID, ad esempio:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8

DateTimeOffset

MM/GG/AAAA HH:MM:SS MM:SS

Dove GG = Giorni, HH = Ore, MM = Minuti, SS = Secondi

Enumerazioni

Il valore di enumerazione ad esempio, che definisce l'enumerazione come illustrato nel codice seguente.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

Nella stringa di query è possibile specificare uno qualsiasi dei singoli valori di enumerazione (o i valori integer corrispondenti).

I tipi con un TypeConverterAttribute in grado di convertire il tipo in e da una rappresentazione di stringa.

Dipende dal convertitore del tipo.

WebGet e WebInvoke

I servizi Web si avvalgono di verbi di recupero (ad esempio HTTP GET) oltre a numerosi verbi di chiamata (ad esempio HTTP POST, il verbo utilizzato dai servizi SOAP). Il modello di programmazione Web consente agli sviluppatori del servizio di controllare sia il modello URI che il verbo associato alle operazioni del servizio con 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"
  [OperationContract]
  [WebGet]
  Customer GetCustomer():
  
  //"Do It"
  [OperationContract]
  [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
  [OperationContract]
  [WebGet( UriTemplate=“customers/{id}” )]
  Customer GetCustomer( string id ):
  
  //"Do It“ -> HTTP PUT
  [OperationContract]
  [WebInvoke( UriTemplate=“customers/{id}”, Method=“PUT” )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

Formati e modello di programmazione Web

Il modello di programmazione Web dispone di nuove funzionalità per utilizzare numerosi formati dati diversi. A livello di associazione, WebHttpBinding è in grado di leggere e scrivere i diversi tipi di dati seguenti:

  • XML
  • JSON
  • Flussi binari opachi

Ciò significa che il modello di programmazione Web è in grado di gestire qualsiasi tipo di dati ma la programmazione potrebbe interessare 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 Panoramica sulla diffusione WCF e Integrazione AJAX e supporto JSON.

Vedere anche

Concetti

Modello a oggetti per la programmazione Web WCF

Altre risorse

Diffusione WCF
Modello di programmazione Web