Web Services
Nel precedente post ho parlato della lacuna della definizione del contratto nel mondo ROA rispetto al mondo SOA. E' bene che faccia qualche precisazione, ma prima di parlare di questo fatemi fare un escursus sul concetto di contratto e come questo si applichi oggi nel mondo SOA (Service Oriented Architecture).
Se chiediamo ad un avvocato di scrivere un contratto, garantendo un certo introito :-), ci innondera' sicuramente di domande e probabilmente scrivera' 40/50 pagine di documento dove ogni singola parola ha un suo peso specifico. In sostanza la regola e', ogni aspetto non 'normato' o definito rappresenta un threat.
In ambito IT...
ROA sta per Resource Oriented Architecture e si contrappone sotto molti punti di vista a SOA, cioe' Service Oriented Architecture.
In realta' non c'e' un modello migliore dell'altro e so potrebbe tranquillamente affermare che un 'servizio' e' necessario per creare una 'risorsa' ed una 'risorsa' e' necessaria per fornire un 'servizio'. Ciononostante possiamo altresi' affermare che il contesto delle risorse e' decisamente predominante.
Quali sono le caratteristiche di ROA:
Addressability: intesa come capacita' di identificare una risorsa addraverso uno URI ben definito
Statelessness: mancanza di supporto nativo per la gestione dello stato
Connectedness:...
Quando parlo di classe proxy immagino il mondo dei web services ed in particolare il lato client. E' una assunzione assolutamente imprecisa, ma lasciatemi questa piccola deformazione professionale :-)
Detto questo, molto spesso chi consuma web services utilizza nel proprio codice direttamente il servizio e le entità ad esso associate. Vediamo un esempio, il mio web method ritorna un'entità Ordine. Ho tre possibilità:
Uso l'Ordine del mio codice (lato client)
Crea una mia classe ordine mappata sull'Ordine ritornato dal web service
Creo una mia classe ordine partial di Ordine
La prima soluzione è la peggiore perchè solitamente il codice generato dal wsdl.exe (o add...
Quando si parla di scalabilità di un sistema software tutti pensano alle prestazioni. In realtà la scalabilità è un concetto un pò più ampio ed include certamente anche la scalabilità temporale (conosciuta sotto certi versi anche come versioning). Garantire la scalabilità delle nostre applicazioni dal punto di vista delle prestazioni non è una cosa molto difficile, basta conoscere bene la piattaforma tecnologica e sfruttarla al meglio. La scalabilità temporale invece richiede un esercizio un pò più complesso che spesso va al dilà del concepire correttamente i namespace XML oppure gli strong names per gli assemblies. Alex Krapf introduce bene il...
WCF rappresenta senz'altro un salto in avanti molto importante per lo sviluppo di applicazioni enterprise. Infatti va tenuto presente che WCF porta con sè una innumerevole quantità di servizi che sino ad oggi sono implementati con ASP.NET web services, System.Messaging (MSMQ), .NET Remoting, Web Services Enhancement (WSE) e Enterprise Services (COM+).
Data la portata del 'cambiamento' abbiamo pensato bene di confezionare una 3 giorni full immersion su WCF illustrandone quelle che sono le potenzialità, come funziona, come si progetta con WCF, come si implementa con WCF, il porting dalle attuali tecnolgie e così via. Non vogliamo fare il ricettario (se...
L'affidabilità nei web services vuol dire molte cose. Una delle più importanti è sicuramente la certezza della recapitazione del messaggio anche in caso questo messaggio sia partizionato in più parti.
Come consuetudine ogni cosa nel mondo "web services" deve essere regolamentato, per ovvi motivi di interoperabilità. Questo dell'affidabilità non fa eccezzione ed ecco quindi che abbiamo OASIS che si occupa del caso WS Reliable Exchange. Questa specifica nasce un pò da WS-ReliableMessaging e un pò da WS-Reliability e vede insieme sia SUN che Microsoft (fra gli altri).
Fatta questa doverosa premessa, volevo concentrarmi sull'implementazione. WCF implementa il protocollo WS-ReliableMessaging e ci...
Chi sviluppa web services avrà riscontratto che sebbene le tecnologie di base (XML, HTTP, SOAP, WSDL, ecc.) siano nativamente interoperabili, è bene ricordare che le nostre scelte sul type system del messaggio si riflettono sul'interoperabilità. Mi viene in mente, ad esempio, l'uso del DataSet nel messaggio (poco interoperabile).
Un interessante punto di riferimento lo troviamo qui.
SOA si basa essenzialmente su 4 principi fondamentali (Policy-Based Behavior Negotiation, Explicitness of Boundaries, Autonomy e Contract Exchange). All'interno di questi punti si cela il problema dell'identificazione delle entità fra i servizi 8senza ovviamente richiedere la duplicazione delle informazioni).
Vediamo un esempio concreto. Immaginiamo di avere un servizio dei contatti ed un al'tro di processazione ordini. Si immagina pertanto che il servizio degli ordini abbia in qualche modo un riferimento alle informazioni dei clienti (contatti). Ma quale informazione ?
Basterebbe avere un identificativo univoco, che permetta al servizio degli ordini di cercare puntualmente un determinato cliente. Se andiamo a guardare come censiamo...
Sin dalle prime versioni di Visual Studio Team System (parlo della beta 1) ho notato una grossa mancanza: un test type dedicato ai web services. Ho sempre pensato (sperato) che prima o poi l'avrebbero introdotto, ma ahimè siamo arrivati all'RTM e niente.
Quindi, la mia scelta è caduta sullo Unit testing. Perchè unit testing ? Semplice, la classe proxy (del web service) è una classe che può essere testata come un OM, al pari di qualsiasi class library.
Nota: E' importante ricordare che se volete il supporto dei wizard per la generazione automatica dello scheletro delle test classe e test methods dovete...
Durante l'ultimo workshop UGI ho presentato una slide con le tecnologie (librerie, framework, servizi) Java e .NET dedicate al mondo dei web services. Ho anche affermato che è bene mantenerle aggiornate pur verificando sempre la compatibilità fra gli aggiornamenti (es. WSE 2.0 e WSE 3.0). Christian ha postato un censimento delle librerie e gli standrd da tenere sempre sott'occhio.
Full Web Services Archive