Introduzione alla tecnologia WCF

Transcript

Introduzione alla tecnologia WCF
Corso Sviluppatore servizi per il Web (WCF)
01
Lezione 01
Introduzione alla
tecnologia WCF
Premessa
Il corso su WCF di cui state leggendo la prima lezione, vi guiderà alla scoperta
di questa nuova tecnologia introdotta da Microsoft per venire incontro alle
esigenze dei moderni sviluppatori software i quali si ritrovano sempre più
spesso a dover sviluppare applicazioni orientate ai servizi, ovvero applicazioni
che hanno necessità di comunicare con altre applicazioni in maniera distribuita.
WCF, acronimo di Windows Communication Foundation, uno dei nuovi
framework introdotti con la versione 3.0 del .NET Framework, consente lo
sviluppo di applicazioni e servizi che comunicano tra loro anche attraverso reti
distribuite lasciando però allo stesso tempo la piena libertà al programmatore
di ridefinire ogni aspetto di questo scenario.
Nelle prossime lezioni conosceremo quindi questa nuova tecnologia e come
essa ci permetta di implementare, anche abbastanza facilmente, applicazioni
orientate ai servizi (SOA).
Questo corso è rivolto a tutti coloro che già sviluppano in .NET e desiderano
approfondire la conoscenza di Windows Communication Foundation per
realizzare applicazioni innovative.
E’ richiesta ovviamente una conoscenza anche solo di base del .NET Framework
in generale ed uno tra i due linguaggi principali del Framework, C# o VB.NET.
Per questioni di spazio però, gli esempi proposti nelle lezioni saranno scritti
solo nel linguaggio C# in quanto l’implementazione dei concetti che
affronteremo non è molto differente tra un linguaggio e l’altro.
Tutti gli esempi faranno uso dell’ambiente di sviluppo Microsoft Visual Web
Developer 2008 Express Edition oppure di Microsoft Visual C# 2008
Express Edition a seconda degli specifici esempi che verranno proposti.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
1
Corso Sviluppatore servizi per il Web (WCF)
Lezione 01
Ovviamente l’ambiente di sviluppo più idoneo per sviluppare in WCF ed
usufruire di tutte le sue funzionalità è Visual Studio 2008 nella sua versione
completa (Standard o Professional) ma anche con le versioni Express è
possibile ugualmente realizzare delle applicazioni complete. Nelle successive
lezioni vedremo come installare questi prodotti.
Obiettivo finale di questo corso è quindi quello di permettervi di acquisire una
buona conoscenza della tecnologia WCF anche dal punto di vista teorico e di
poterla utilizzare attivamente nel vostro lavoro quotidiano.
Le origini di WCF
Windows Communication Foundation, meglio conosciuta come WCF, è una
tecnologia presentata per la prima volta da Microsoft alla Professional
Developer Conference (PDC) del 2003 sotto il nome in codice di “Indigo”.
WCF nasce come evoluzione delle precedenti tecnologie rivolte allo sviluppo di
applicazioni SOA, Service-Oriented Architecture, quali .ASMX Web Services,
.NET Remoting, .NET Enterprise Services e Web Service Enhancements (WSE).
Queste tecnologie sono state quindi assorbite da un unico framework che ne
riunisce le potenzialità ma soprattutto semplifica il modello di programmazione
unificandolo e rendendo quindi di conseguenza molto semplice passare da una
tecnologia (o protocollo) all’altra senza alcuno sforzo.
Come abbiamo detto, WCF consente lo sviluppo di applicazioni SOA, ma quali
sono le caratteristiche di questa categoria di applicazioni? Per SOA si intende
una architettura basata sull’implementazione o la fruizione di servizi e si basa
su quattro principi fondamentali:
Confini Espliciti: la tecnologia ed il linguaggio utilizzati per l’implementazione
del servizio sono noti solo al servizio stesso mentre all’esterno non vengono
esposte caratteristiche od informazioni che sono irrilevanti al fine della fruizione
del servizio.
Servizi Autonomi: il servizio deve poter essere eseguito e modificato senza
per questo influire sui client che lo utilizzano. Detto in altre parole, il servizio
non deve dipendere da caratteristiche del client e non deve modificare, in
seguito a modifiche ed aggiornamenti, il modo in cui questi lo richiamano.
I Servizi espongono solo contratti o schemi: il servizio deve esporre ai
client solo schemi e contratti utili alla sua fruizione che non devono in alcun
modo dipendere dalla specifica tecnologia utilizzata per la sua
implementazione. Questo significa che il servizio non deve mai esporre tipi o
classi specifiche del linguaggio di programmazione utilizzato per realizzarlo.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
2
Corso Sviluppatore servizi per il Web (WCF)
Lezione 01
Compatibilità basata su regole prestabilite: le regole di comunicazione tra
i servizi ed i loro client sono prestabilite e non possono essere modificate
arbitrariamente dopo la loro prima pubblicazione.
L’architettura di WCF
WCF è quindi un Framework che racchiude tutti i pregi delle precedenti
tecnologie nate per lo sviluppo service oriented ed a questi vi aggiunge la
facilità di implementazione oltre alla estrema versatilità di utilizzo.
Le altre tecnologie, comunque, non vengono sostituite da WCF ma a questo vi
si affiancano per consentire allo sviluppatore la scelta della tecnologia di volta
in volta più opportuna per lo sviluppo della specifica applicazione che si intende
realizzare.
WCF introduce diversi nuovi concetti che è necessario conoscere prima di poter
iniziare a sviluppare e che vedremo dettagliatamente nel corso delle prossime
lezioni.
Per sviluppare servizi WCF non è necessario dover conoscere nuovi strumenti in
quanto tutto può essere fatto utilizzando i classici strumenti e linguaggi di
programmazione che già conosciamo.
Questa è una caratteristiche di tutti i componenti del .NET Framework e come
tale, anche WCF, si avvantaggia di questa importante caratteristica.
L’architettura di WCF si basa sui servizi ed in particolare sui messaggi che
questi servizi permettono di scambiare. A grandi linee i componenti
fondamentali di WCF sono quindi il messaggio, il mittente ed il destinatario.
A questi componenti si affiancano i corrispondenti Layer che ospitano tutte le
funzionalità e le classi necessarie alla gestione di ciascun momento della
comunicazione. I layer sono:
•
•
•
•
Contracts Layer
Service Model Layer
Messaging Layer
Hosting Layer
Questa separazione di WCF in layer consente di mantenere ben separati i vari
strati preposti alla gestione della comunicazione tra il servizio ed i suoi client.
In questo modo è possibile variare il comportamento di ciascun layer od anche
sostituirlo completamente con uno differente, senza per questo intaccare il
comportamento degli altri layer che difatti continueranno a fare il loro lavoro.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
3
Corso Sviluppatore servizi per il Web (WCF)
Vediamo quindi uno schema
dell’architettura di WCF:
che
illustra
i
componenti
Lezione 01
fondamentali
Figura 1
Il Service Model Layer, rappresentato dal Service runtime, è lo strato
preposto al controllo del messaggio ed al suo adattamento alle esigenze dello
specifico servizio che si sta realizzando.
E’ il layer più vicino allo strato Contract e per questo motivo è anche uno degli
strati più utilizzati.
Il Service runtime si occupa della gestione degli errori (Error Behavior), della
transazione (Transaction Behavior) della concorrenza (Concurrency Behavior) e
di numerosi altri importanti aspetti relativi al rapporto tra il messaggio
(Messaging Layer) ed il contratto (Contract Layer).
Nello specifico, nello strato Service Layer si fa uso dei Behavior, ovvero di
particolari componenti totalmente personalizzabili dallo sviluppatore che
permettono di eseguire i compiti più disparati e che sono il vero cuore dello
strato Service.
Vedremo i Behavior più approfonditamente nelle prossime lezioni, evidenziamo
ora solo una particolare caratteristica di questi componenti, ovvero il fatto di
essere dissociati totalmente dal contratto che il servizio stipula con i suoi client.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
4
Corso Sviluppatore servizi per il Web (WCF)
Lezione 01
Un behavior infatti può essere implementato lato server e non necessariamente
deve essere conosciuto anche dal client.
Il Messaging Layer è ovviamente il layer più importante di tutta l’architettura
WCF, in quanto proprio in questo layer viene implementata la gestione dei
messaggi che il servizio trasporta.
Componenti fondamentali di questo strato sono i Channel, ovvero quei
componenti che utilizzano i protocolli di comunicazione, quali ad esempio HTTP
o Named Pipe per consentire il trasporto dei messaggi ed il loro adattamento in
base allo specifico channel prescelto.
Altro compito fondamentale dei channel, è quello di eseguire l’encoding del
messaggio in differenti formati sulla base delle scelte dello sviluppatore e
quindi ad esempio in formato binario, testo, XML, e così via.
I Channel si suddividono in tre categorie denominate Channel Shapes:
•
•
•
Protocols
Encoders
Transports
I Channel di tipo Protocols, si occupano della trasformazione del messaggio in
un formato idoneo per l’utilizzo con i diversi protocolli disponibili.
Gli Encoders invece codificano il messaggio sulla base delle impostazioni
definite dallo sviluppatore per il servizio, ed infine i channel di tipo Transports
che invece trasformano il messaggio in un formato idoneo allo specifico
protocollo di trasporto prescelto (HTTP, Named Pipe, Tcp, ecc).
L’Hosting Layer (nello schema Activation and Hosting) è lo strato del servizio
WCF che si occupa di dare “ospitalità” al servizio.
In questo strato troviamo l’ambiente di esecuzione del servizio che ad esempio
potrebbe essere rappresentato da uno degli host più comuni per un servizio
WCF, IIS (Internet Information Services).
Oltre ad IIS troviamo però, dalla sua versione 7.0 in poi, anche un nuovo host
realizzato appositamente per WCF, denominato WAS (Windows Activation
Services), il quale consente anche di utilizzare sotto IIS, protocolli differenti dal
protocollo HTTP.
Lo strato Contract è l’unico strato che ha un rapporto diretto con l’applicazione
o client ed è lo strato a cui perviene il lavoro svolto dai tre strati inferiori.
In WCF per contratto, si intende cosa offre il servizio e quali sono le regole che
i client devono rispettare per poterne usufruire.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
5
Corso Sviluppatore servizi per il Web (WCF)
Lezione 01
Non vi è un solo tipo di contratto in WCF ma vi sono cinque tipologie ben
definite di possibili contratti che un servizio WCF può esporre ai suoi client:
•
•
•
•
•
Service Contract
Data Contract
Message Contract
Fault Contract
Callback Contract
Il Service Contract è il contratto tipico di un servizio WCF che definisce le
funzionalità del servizio, i parametri da passare e da ricevere e le modalità di
fruizione.
I parametri definiti in un Service Contract sono rappresentati dai tipi semplici
del .NET Framework, quindi nel momento in cui questi tipi semplici non sono
più sufficienti per gli scopi del servizio e si ha la necessità di utilizzare tipi
custom più complessi, allora è possibile realizzare un Data Contract, che
definisce appunto i tipi custom che si intende utilizzare per lo scambio di dati
da e verso il servizio.
Se oltre alle informazioni strettamente necessarie alla specifica operazione che
il servizio deve compiere, si ha anche la necessità di scambiare dati accessori
che quindi non fanno parte della singola funzionalità ma servono al contesto di
esecuzione del servizio, allora possiamo implementare un Message Contract
che ci permette appunto di gestire informazioni generiche relative al servizio in
se e non alla specifica operazione.
Quando abbiamo la necessità di gestire le eccezioni, possiamo invece far uso di
un Fault Contract per definire anche in caso di errori, quale convenzione
utilizzare per comunicarlo al client.
Questo tipo di contratto non è obbligatorio ma ci consente comunque di
mantenere un maggior controllo sul nostro servizio.
Infine un Callback Contract è un contratto molto particolare che,
implementato sul client invece che sul server, permette in un preciso momento
di invertire i ruoli e consentire quindi al server di contattare il client per
comunicargli informazioni particolari.
Vedremo più dettagliatamente ognuna di queste tipologie di contratti nelle
prossime lezioni, insieme, ovviamente, anche ad esempi di codice per chiarire
meglio le idee.
Chiudiamo questa prima lezione su WCF accennando al ruolo importante che
rivestono gli Attributi del .NET Framework nella realizzazione di servizi WCF.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
6
Corso Sviluppatore servizi per il Web (WCF)
Lezione 01
Un Attributo .NET è una particolare classe che possiamo utilizzare per
“decorare” una qualsiasi altra classe e più in generale, tipo, del .NET
Framework per specializzarne ulteriormente il comportamento o per
impostarne specifiche proprietà.
Gli attributi più comunemente utilizzati in WCF sono ServiceContractAttribute e
OperationContractAttribute, utilizzati rispettivamente per definire come servizio
una classe od una interfaccia e per definire come operation alcuni suoi
metodi.
Se consideriamo che il tipo più idoneo alla definizione di un servizio WCF è una
interfaccia, possiamo definire una interfaccia come servizio ed un suo membro
come operation nel seguente modo:
[ServiceContract()]
public interface IMyService
{
[OperationContract()]
string GetAddress( string customerName);
}
Anche se ridotto all’osso, queste righe di codice definiscono un servizio WCF
che ovviamente, essendo rappresentato da una interface, dovrà essere
implementato da una classe per poter essere utilizzato da un client, operazione
che vedremo nelle prossime lezioni del corso.
Gianni Malanga - Merlin Wizard DMC © 2009 Tutti i diritti riservati
7