Questa terza edizione di un titolo molto popolare, aggiornato alle novità della versione 4 di Microsoft .NET Framework e relative a
Windows Communication Foundation (WCF), scritto da una delle leggende dello sviluppo software industriale, dalle mie parti verrebbe definito un "mattone"; in realtà dopo averlo letto penso che chi voglia sapere "quasi" tutto riguardo
WCF non può permettersi di ignorare questo testo.
Parecchie delle cose scritte in questo libro effettivamente non le ho mai trovate in altre fonti, non me ne meraviglio vista la fama dell'autore in termini di background e conoscenza. Riguardo il
lettore tipo di questo testo non ho dubbi: il neofita troverà le basi per iniziare a progettare e sviluppare servizi
WCF, l'intermediate e l'esperto troveranno pane per i loro denti.
Il
primo capitolo riassume, in ottanta pagine, i fondamenti di
WCF, utile lettura per il neofita, elencando con brevi esempi di codice i vari tipi di
binding, di
hosting, nonché in generale l'architettura. Il
secondo e il terzo capitolo sono dedicati rispettivamente ai
Service Contract e ai
Data Contract;
Lowy spiega come progettare una
service contract factory e quali benefici ne conseguono in termini di disaccoppiamento di contratti contenenti poche operazioni; inoltre rende disponibile il codice d'esempio di un metodo statico di
helper, utilizzabile quando si vuole interrogare un servizio e capire se esiste un
endpoint, che espone un particolare contratto adatto ai nostri scopi; in altre parole Lowy mostra come interagire con
System.ServiceModel.Description e le sue classi di
helper, che permettono di processare programmaticamente i metadati dei servizi.
Il
quarto e quinto capitolo sono a mio avviso decisamente importanti, poiché riguardano la gestione delle modalità di istanziazione dei servizi
WCF rispetto ai
client consumer e le modalità di invocazione dei singoli metodi
WCF (Operation), l'autore spiega in dettaglio quali sono le differenze e i benefici rispetto alla scelta di configurare un servizio
Per-Call,
Per-Session Singleton, inoltre fornisce suggerimenti riguardo la configurazione del
Throttling. Vengono descritte in dettaglio le modalità di invocazione dei metodi
WCF, come configurare una operazione
One-Way unitamente alla
reliability, come sfruttare al meglio le invocazioni callback, farne il setup e gestirne il funzionamento; infine le ultime pagine del quinto capitolo sono dedicate allo streaming di messaggi di grandi dimensioni.
Il
sesto capitolo illustra le
exception restituite da
WCF e soprattutto mostra alcune tecniche di gestione, la creazione del
fault contract, il debugging semplice e, in caso di
callback, la possibilità di creare
behaviour custom della propagazione delle eccezioni nel codice.
Le cento pagine del
settimo capitolo descrivono l'argomento
Transaction, altro punto fondamentale di
WCF; vi è la descrizione di ogni protocollo utilizzabile secondo il contesto e le esigenze delle transazioni (Lightweight,
OleTx, WSAT) unitamente alla descrizione dei rispettivi manager (LTM, KTM, DTC). Ampio spazio con esempi di codice viene dato alla classe
Transaction, alla configurazione dell'ambiente transazionale e ai metodi di propagazione da utilizzare in maniera dichiarativa; con la classe
TransactionScope e le sue opzioni viene discussa la parte programmatica della gestione transazionale in
WCF. Un altro argomento mostrato è la gestione della modalità di istanziazione dei servizi nelle transazioni, quindi come gestire la modalità
Per-Call,
Per-Session Singleton e il
callback.
La gestione delle istanze, unitamente alle problematiche di concorrenza, è l'argomento dell'
ottavo capitolo: il
ConcurrencyMode.Single,
Multiple,
Reentrant sono le prime modalità descritte e l'accesso concorrente è mostrato suddiviso per
Per-Call, e
Singleton; inoltre molto interessanti sono le informazioni e gli esempi di codice riguardanti la necessità, in alcuni scenari, che
WCF sia in grado di aggiornare
user interface e quindi operare in contesti di
thread differenti, nonché effettuare attività con operazioni
callback sincrone e asincrone. Veramente un ottimo capitolo.
Altro capitolo decisamente importante è il
nono, in cui l'autore disquisisce riguardo i servizi disconnessi e quindi la gestione degli accodamenti di messaggi
WCF; una breve panoramica architetturale, come configurare i queue service, la creazione di una coda per MSMQ, la gestione di essa in una transazione e la gestione delle code
dead-letter sono alcuni degli argomenti discussi.
Il
decimo capitolo contiene quasi cento pagine in cui Lowy parla di sicurezza: le modalità di protezione a livello di trasporto e di messaggio e la gestione delle identità e delle autenticazioni sono i principali argomenti affrontati; nel capitolo c'è anche una suddivisione delle tipologie di security secondo scenari intranet, internet, B2B e
anonymous application, quindi si discute di tipi di
binding utilizzabili, di protezione dei messaggi, di
impersonation e di
windows authentication.
L'
undicesimo capitolo è dedicato esclusivamente a
WCF integrato in Windows Azure, altrimenti chiamato
AppFabric Service Bus: l'autore spiega cos'è un
Relay Service Address, a cosa serve il
Service Bus Registry, il
Service Bus Explorer, il
buffering service, la security e soprattutto quali sono i
binding disponibili per questo tipo di
WCF esposto dal namespace
Microsoft.ServiceBus.
Juval Lowy ha inoltre arricchito il libro con ben
sette appendici utili a neofiti ed esperti, nelle quali trovano posto: la storia della
Service Orientation; gli
header e i
context; il
discovery dei servizi; il servizio di
Publish-Subscribe; un piccolo framework chiamato
Generic Interceptor spiegato e reso disponibile dall'autore; un elenco di regole standard e
best practice per la codifica di
WCF; infine la lista dei metodi di
ServiceModelEx, l'estensione per
WCF scritta dallo stesso autore e reperibile su sito O'Reilly.