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