Introduzione a WCF 4.0

Scritto da  Pietro Libro il mercoledì 13 ottobre 2010
Linguaggio: C#,VB   •  Framework: 4.0   •  Livello: 100


WCF è l'acronimo di Windows Communication Foundation e rappresenta una delle ultime tecnologie sviluppate da Microsoft® per lo sviluppo di applicazioni in ambiente distribuito e  per la comunicazione tra applicazioni. Rappresenta un modello di programmazione unificata per la costruzione di applicazioni orientate ai servizi.

Prima di continuare con l'argomento è necessario fare qualche "piccolo" cenno  teorico a riguardo di  SOA, Service Oriented Architectur. Citando Wikipedia (http://it.wikipedia.org/wiki/Service-oriented_architecture) , in informatica con il termine SOA si indica generalmente un'architettura software adatta a supportare l'uso dei servizi Web per garantire l'interoperabilità tra diversi sistemi, così da consentire l'utilizzo delle applicazioni come componenti del processo di business e soddisfare le richieste degli utenti in modo integrato e trasparente. L'OASIS (Advancing open standards for the information society, http//www.oasis-open.org),  definisce SOA in questo modo:

Un paradigma per l'organizzazione e l'utilizzazione delle risorse distribuite che possono essere sotto il controllo di domini di proprietà differenti. Fornisce un mezzo uniforme per offrire, scoprire, interagire ed usare le capacità di produrre gli effetti voluti consistentemente con presupporti e aspettative misurabili.

Cercando su internet troveremmo almeno un'altra decina di definizioni diverse, ma un'architettura SOA "semplicemente" indica che ogni componente di un sistema dovrebbe essere un servizio, e il sistema dovrebbe essere composto da diversi servizi a basso accoppiamento (loosely coupled), nel senso che i questi dovrebbero essere indipendenti l'uno dall'altro e il cambiamento di uno di questi non deve creare effetti su gli altri. SOA non è quindi un linguaggio o una specifica tecnologia, ma è un approccio al design di sistemi. Questo tipo di architettura si adatta particolarmente a realtà che presentano una certa complessità di processi ed applicazioni dato che agevola l'interazione tra le diverse realtà aziendali permettendo di sviluppare processi efficienti sia internamente che esternamente, aumentandone la flessibilità e l'adattabilità.

Torniamo a  WCF, una tecnologia che mette insieme ASMX Web Services, WSE, .Net Remoting, System Messaging ed Enterprise Service.

Quali sono i vantaggi di utilizzare una tecnologia come WCF ?

  • "Comunicare" utilizzando Web Service standard, interoperabilità con altre piattaforme che supportano SOAP (ad esempio applicazioni server basate su J2EE)
  • Può essere esteso e configurato per comunicare con Web Services che utilizzando messaggi non basati su SOAP come ad esempio con messaggi in  formato XML come RSS
  • E' nato con lo scopo di essere una delle piattaforme per lo sviluppo di applicazioni distribuite più veloce e performante di Microsoft®
  • Permette di avere delle ottime performance quando entrambe le parti comunicano tramite WCF: la codifica utilizzata è una versione binaria ottimizzata  dell'Information Set XML.
  • La Gestione del ciclo di vita degli oggetti, la definizione di transazioni distribuite e altri aspetti di Enterprise Services sono forniti in modo nativo
  • Supporto ad un largo insieme delle specifiche WS-* per fornire affidabilità, sicurezza e transazioni quando si utilizzano piattaforme conformi a questi standard
  • Message Queuing senza l'utilizzo di API.

La figura seguente illustra i layers che compongono l'architettura di WCF (http://msdn.microsoft.com/en-us/library/ms733128.aspx ):

Architettura

Contracts

Il layer Contracts definisce i vari aspetti del sistema di messaggistica. I Data Contract descrivono  i parametri (tipi complessi) che compongono i messaggi che un servizio è in grado di creare o consumare. Questi sono definiti tramite XSD (XML Schema Definition Language)  così che ogni sistema capace di "comprendere" XML può accedere e processare questi documenti. I Message Contract definiscono specifiche parti del messaggio che usano protocolli SOAP e permettono un controllo più fine su queste parti del messaggio, necessario in particolari condizioni di interoperabilità. Il Service Contract specifica le firme (signatures) del servizio ed è distribuito come una semplice interfaccia.

Service runtime

Questo layer contiene i behaviors (comportamenti) che si verificano durante il funzionamento del servizio. Ad esempio, un error behavior specifica che cosa accade quando un errore si verifica durante il funzionamento del servizio controllando, ad esempio, quali informazioni devono essere inviate al client.

Messaging

Questo layer è composto dai canali (channels),  componenti che processano le informazioni in qualche modo. Un insieme di channels è detto channel stack. Ci sono due tipi di channels: transport e protocol. I primi leggono e scrivono informazioni dalla rete, come ad esempio HTTP, Named Pipes, TCP e MSQM. I protocol channels implementano il processing dei messaggi eventualmente leggendo o scrivendo addizionali headers nel messaggio. Esempi di tali protocolli sono WS-Security e WS-Reliability. Questo layer rappresenta i possibili formati e patterns per lo scambio dei dati.

Activation e Hosting

Un servizio (service) è un programma e come tale deve essere eseguibile (self-hosted service). I servizi possono essere hosted o essere eseguiti da un agente esterno come IIS o Windows Activation Service (WAS). Esistono diversi modi di eseguire l'hosting di un servizio WCF.

I concetti fino ad ora esposti potrebbero sembrare ostici, soprattutto per chi si avvicina a WCF per la prima volta, ma sicuramente gli esempi di codice che vedremo nei prossimi articoli riusciranno a semplificarne il significato.

 

WCF - ABC


L'acronimo ABC (Address Binding Contract) è la chiave di lettura per capire la composizione di un servizio WCF e del suo funzionamento.

Address - Dove si trova il servizio ?

Indica la locazione specifica di un servizio, il "posto" dove inviare i messaggi. Tutti i servizi WCF sono distribuiti da uno specifico indirizzo rimanendo in ascolto di eventuali richieste. Un indirizzo è normalmente specificato da un URL, dove la prima parte specifica il meccanismo di trasporto mentre la parte restante specifica la locazione univoca del servizio.

Ad esempio l'indirizzo http://www.wcfservices.com/myservices/myfirstservice è un address WCF che utilizza HTTP come protocollo di trasporto, il servizio è presente sul server www.wcfservices.com raggiungibile tramite il percorso univoco myservices/myfirtservice.

Binding - Come parlo con il servizio ?

Le associazioni (bindings) sono utilizzate per specificare il dettagli relativi al transport, all'encoding, e al protocol richiesti dal client per poter comunicare con il servizio. Un binding è costituito da una collezione di elementi dove ogni elemento specifica un aspetto di come il servizio comunica con i client. Un binding deve includere almeno un elemento relativo al transport (ad esempio TCP o HTTP), uno all'encoding (ad esempio Text o  Binary) dei messaggi  ed uno al protocol. Alcuni dei Bindings forniti "gratis" da WCF sono:

BasicHTTPBinding,WSHTTPBinding, WSDualHttpBinding,WSFederationHttpBinding, NetTcpBinding, NetNamedPipeBinding, NetMsmqBinding, NetPeerTcpBinding e MsqmIntegrationBinding.

Contract - Che cosa può fare il servizio per me ?

Un contratto WCF è un insieme di specifiche che definisce l'interfacce di un servizio WCF. Un servizio WCF comunica con altre applicazioni accordandosi tramite "contratti". Ci sono diversi tipi di contratto: Service Contract, Operation Contract, Data Contract, Message Contract e Fault Contract. Un Service Contract semplicemente informa che cosa il servizio può fare. Un servizio WCF ha almeno un Service Contract. Un Operation Contract è definito all'interno di un Service Contract, definisce i parametri e i tipi di ritorno di un'operazione. Un'operazione può prendere in ingresso dati primitivi come ad esempio interi, tipi complessi definiti tramite Data Contract o tipi definiti tramite Message Contract. Un Operation Contract definisce anche altre impostazioni come la direzione (ad esempio one-way o two-way) o il Fault Contract, uno o più errori che possono presentarsi durante l'esecuzione dell'operazione.

Se un'operazione ha necessità di passare un messaggio come parametro o ritornare un messaggio, il tipo di questi messaggi è definito dai Message Contracts. Questo tipo di messaggio definisce alcuni aspetti come quelli legati alla sicurezza o se un determinato elemento deve essere inserito all'interno del body o dell'header del messaggio. I Data Contracts specificano i tipi di dato del servizio WCF. Tutti i tipi di dato usati dal servizio WCF devono essere descritti dai metadati (tramite il Data Contract) affinché le applicazioni possano interagire con il nostro servizio. Un Data Contract può essere utilizzato da un Operation Contract come parametro o return type, oppure può essere utilizzato da un Message Contract per definire elementi del messaggio. Infine abbiamo il Fault Contract che specifica un'eventuale errore che può essere ritornato al chiamante del servizio. Ogni operazione di un servizio può avere zero o più Fault Contracts.

Prima di procedere con il nostro primo WCF Service è necessario specificare qualche ulteriore concetto "teorico" da tenere in mente durante la progettazione e lo sviluppo dei nostri servizi: Endpoint, Behavior, Hosting, Self Hosting, Windows Service Hosting, IIS Hosting.

Endpoint

Un Endpoint è un "posto" dove le comunicazioni sono inviate e/o ricevute (secondo della configurazione). La comunicazione avviene tra Endpoints. Un servizio può esporre uno o più Application Endpoints (zero o più Inftrastructure Endpoints). Un servizio espone queste informazioni come metadati che le applicazioni processano per generare gli opportuni WCF client da utilizzare per la comunicazione con il servizio. Quando necessario un client genera un Endpoint compatibile con uno degli Endpoints esposti dal servizio. Ogni Endpoint è descritto ad un indirizzo, un binding ed un Service Contract (WCF ABC).

Hosting

Un servizio WCF è un componente che può essere chiamato da altre applicazioni. Deve essere eseguito in un ambiente per poter essere "scoperto" (discovered) e usato. L'host WCF è un'applicazione che controlla la vita del servizio. Come vedremo ci sono diversi modi per eseguire l'hosting di un servizio WCF.

Self Hosting

Un servizio WCF può essere self-hosted, ovvero il servizio può girare come applicazione standalone e auto controllare il proprio lifetime. Questo è il modo più flessibile e semplice di eseguire l'hosting di un servizio WCF, avendo però funzionalità limitate.

Windows Services Hosting

Un servizio WCF può anche essere ospitato (hosted) come servizio Windows (un processo gestito dal sistema operativo e automaticamente fatto partire con l'avvio di esso, se opportunamente configurato).

IIS Hosting

Uno dei migliori modi di eseguire l'hosting di un servizio WCF è utilizzare IIS. Per sua natura IIS ha molti funzionalità utili come process recycling, idle shutdown, process health monitoring, attivazione message-based, high availability, easy manageability, versioning e scenari di deployment, tutte funzionalità richieste da servizi WCF di livello enterprise.

Metadata

I metadata di un servizio descrivono le caratteristiche del servizio che un'entità esterna deve conoscere per poter comunicare con il servizio stesso. I metadata possono essere consumati tramite il ServiceModel Metadata Utility (scvutil.exe) per generare un client WCF e per fornire la configurazione che un'applicazione client deve avere per poter interagire con il servizio. I metadata esposti dal servizio includono XML schema che ne definiscono i Data Contract, documenti WDSL che ne descrivono i metodi. E' possibile nascondere i metadata anche se non è una pratica comune.

In quest'articolo abbiamo introdotto molto brevemente i concetti generali che si celano dietro il funzionamento di WCF. In particolare, molti degli argomenti trattati riguardano in modo specifico la versione 4 di WCF, ma spesso sono applicabili anche nella versione precedente. Nei prossimi articoli affronteremo argomenti quali creazione di servizi WCF, gestione degli errori, hosting, debugging e testing.

Contract - Che cosa può fare il servizio per me ?

 

Un contratto WCF è un insieme di specifiche che definisce l'interfacce di un servizio WCF. Un servizio WCF comunica con altre applicazioni accordandosi tramite "contratti". Ci sono diversi tipi di contratto: Service Contract, Operation Contract, Data Contract, Message Contract e Fault Contract. Un Service Contract semplicemente informa che cosa il servizio può fare. Un servizio WCF ha almeno un Service Contract. Un Operation Contract è definito all'interno di un Service Contract, definisce i parametri e i tipi di ritorno di un'operazione. Un'operazione può prendere in ingresso dati primitivi come ad esempio interi, tipi complessi definiti tramite Data Contract o tipi definiti tramite Message Contract. Un Operation Contract definisce anche altre impostazioni come la direzione (ad esempio one-way o two-way) o il Fault Contract, uno o più errori che possono presentarsi durante l'esecuzione dell'operazione.

Se un'operazione ha necessità di passare un messaggio come parametro o ritornare un messaggio, il tipo di questi messaggi è definito dai Message Contracts. Questo tipo di messaggio definisce alcuni aspetti come quelli legati alla sicurezza o se un determinato elemento deve essere inserito all'interno del body o dell'header del messaggio. I Data Contracts specificano i tipi di dato del servizio WCF. Tutti i tipi di dato usati dal servizio WCF devono essere descritti dai metadati (tramite il Data Contract) affinché le applicazioni possano interagire con il nostro servizio. Un Data Contract può essere utilizzato da un Operation Contract come parametro o return type, oppure può essere utilizzato da un Message Contract per definire elementi del messaggio. Infine abbiamo il Fault Contract che specifica un'eventuale errore che può essere ritornato al chiamante del servizio. Ogni operazione di un servizio può avere zero o più Fault Contracts.

Prima di procedere con il nostro primo WCF Service è necessario specificare qualche ulteriore concetto "teorico" da tenere in mente durante la progettazione e lo sviluppo dei nostri servizi: Endpoint, Behavior, Hosting, Self Hosting, Windows Service Hosting, IIS Hosting.

Endpoint

 

Un Endpoint è un "posto" dove le comunicazioni sono inviate e/o ricevute (secondo della configurazione). La comunicazione avviene tra Endpoints. Un servizio può esporre uno o più Application Endpoints (zero o più Inftrastructure Endpoints). Un servizio espone queste informazioni come metadati che le applicazioni processano per generare gli opportuni WCF client da utilizzare per la comunicazione con il servizio. Quando necessario un client genera un Endpoint compatibile con uno degli Endpoints esposti dal servizio. Ogni Endpoint è descritto ad un indirizzo, un binding ed un Service Contract (WCF ABC).


Tags: WCF SOA

 
x