Introduzione a WCF 4.0
Scritto da
Pietro Libro
il
mercoledì 13 ottobre 2010
Linguaggio:
•
Framework:
•
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
):

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