WINDOWS COMMUNICATION FOUNDATION Fabio Cozzolino DotNetSide fabio@dotnetside.org
Agenda Overview WCF 4.0 REST WCF Tips & Tricks SOA L’ABC di WCF I Behaviors WCF 4.0 REST SOA vs REST WCF Tips & Tricks
SOA Tenets Boundaries are Explicit Services are Autonomous Services Shares Schema and Contracts, not Classes or Types Compatibility is Policy-Based
Cos’è WCF? Un framework unificato per lo sviluppo di applicazioni distribuite su piattaforma Windows Rappresenta come Microsoft pensa SOA (Service-Oriented Architecture) … ma non solo
Caratteristiche di WCF Comunicazioni basate sul concetto di messaggio Interoperabilità Indipendenza dal protocollo di trasporto e dalla formattazione del messaggio Indipendenza dall’hosting Servizi infrastrutturali pluggabili (sicurezza, transazioni, ecc…) E’ un framework con un’architettura altamente estendibile
Overview di WCF: L’ABC Un servizio WCF si basa su: Un Address: DOVE Un Binding: COME Un Contract: COSA L’insieme costituisce l’Endpoint del servizio
Address, Binding, Contract Behaviours Messaggio Consumer Provider C B A A B C A B C A B C EndPoint Address (dove) Binding (come) Contract (cosa)
Address Identifica l’indirizzo del servizio specificando: URL http://www.mysite.com/myservice.svc net.tcp://localhost:10101/myservice.svc … Headers (opzionale) E’ un’istanza di EndpointAddress
Binding COME comunichiamo con il servizio il protocollo utilizzato (http, tcp, msmq, etc..) le modalità di formattazione del messaggio (encoding) le impostazioni di sicurezza (ws-security) gli eventuali standard da utilizzare (ws-trust, ws-reliablemessaging, ws-atomic transaction,SOAP) Ma anche sessioni e transazioni Esistono binding predefiniti ma possiamo crearne anche di personalizzati
Contract Identifica le informazioni scambiate dal servizio Esistono tre tipi di contratto: Service contract (WSDL) Message contract (SOAP) Data contract (Xml Schema)
Behaviors Servizi infrastrutturali che modellano il comportamento del servizio Attivabili nel codice e dal .config Utile per le operazioni più delicate (sessioni, transazioni, instancing, identity) Per le politiche da adottare nello scambio dei messaggi (credenziali, throttling, auditing, serializzazione, affidabilità, ecc…) Possiamo creare behavior personalizzati: Implementando le interfacce System.ServiceModel.IServiceBehavior System.ServiceModel.IEndpointBehavior System.ServiceModel.IContractBehavior System.ServiceModel.IOperationBehavior
WCF Hosting Self-hosting Internet Information Services Qualsiasi altra applicazione (Console,WinForms, etc..) Posso utilizzare tutti i protocolli previsti da WCF Internet Information Services IIS 6 solo http IIS 7 con Windows Activation Services: net.tcp, net.msmq, etc...
Implementazione di un servizio in WCF DEMO
Windows Communication Foundation 4.0 Configuration-free services Service Discovery with WS-Discovery Routing Service Event Tracing for Windows
Endpoint Configuration in 3.x B C Service http://host vdir1 vdir2 vdir2 Echo. svc Web. config
Default Endpoints A B C Service ServiceHost. AddDefaultEndpoints() http://host vdir1 vdir2 vdir2 Echo. svc Echo. svc Protocol Mapping Scheme Binding http:// BasicHttpBinding …
Default Bindings A B C Service http://host vdir1 Web. config vdir2 <system.serviceModel> <bindings> <basicHttpBinding> <binding name="" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/> </basicHttpBinding> </bindings> </system.serviceModel> http://host vdir1 A B C Service Web. config vdir2 vdir2 Gli endpoints di tipo BasicHttpBinding utilizzano la configurazione dal default binding che recuperano nella gerarchia dei file di configurazione Echo. svc
Default Behaviors A B C Service http://host Web. config vdir1 Bv vdir2 <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceThrottling maxConcurrentCalls="32"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> http://host Web. config vdir1 A B C Bv Service vdir2 vdir2 Echo. svc Bv Otteniamo un merge dei behaviour ereditati con i behaviour del config corrente Un servizio o un endpoint ottengono il behavior di default recuperandolo dalla gerarchia dei file di configurazione Web. config
ROUTING SERVICE in WCF 4.0
Routing Service Dispatching dei messaggi basato su filtri Protocol and security bridging Mapping delle eccezioni Ho a disposizione un set predefinito di filtri: Filter On MessageFilter Action ActionMessageFilter Address header AddressMessageFilter Address header – longest prefix matching AddressPrefixMessageFilter Endpoint Name EndpointNameMessageFilter No Filter – matches everything MatchAllMessageFilter Logical And of two filters StrictAndMessageFilter XPath expression XPathMessageFilter Custom
Message Routing Lab Service Action = http://healthcare/labservice Client Routing Service Hospital Service Action = http://healthcare/hospitalservice
Protocol Bridging Client Service BasicHttp SOAP 1.1 SOAP 1.2 Net.Tcp Routing Service BasicHttp SOAP 1.1 SOAP 1.2 Net.Tcp
Security Client Service Message sent using Client Identity Routing Service Message sent using Client Identity Message sent using Client Identity Message sent using Routing Service Identity Impersonation using WindowsIdentityToken
Error Handling Lab Service Client Backup Lab Service Routing Service MessageFilter Endpoint Alternate Endpoints action == http://healthcare/LabService LabService BackupLabService
WS-DISCOVERY in WCF 4.0
Discovery Consente la pubblicazione di un endpoint di un servizio e la ricerca utilizzando criteri ben definiti Trova servizi disponibili Riduce la configurazione Semplice modifica della location Applicazioni dinamiche WS-Discovery – e’ uno standard interoperabile per la definizione del protocollo Ad-hoc Discovery Managed Discovery
Ad-hoc Discovery Chat App: Jurgen Chat App: Steve Chat App: Ed Steve Online Chat App: Jurgen Hello Chat App: Steve Hello Steve Online Hello Chat App: Ed
Ad-hoc Discovery Chat App: Jurgen Chat App: Steve Chat App: Ed ProbeMatch Probe Chat App: Steve Probe ProbeMatch Probe Chat App: Ed
Ad-hoc Discovery Chat App: Jurgen Chat App: Steve Chat App: Ed Steve Offline Chat App: Jurgen Bye Chat App: Steve Bye Steve Offline Bye Chat App: Ed
Managed Discovery Chat App: Jurgen Chat App: Steve Discovery Proxy Proxy Available Chat App: Steve Hello Probe Probe Hello Probe ProbeMatch Jurgen Discovery Proxy
Discovery Message Parts Types Lista di xs:QName Contratti richiesti dal client o comunque supportati dal servizio destinatario Scopes Lista di xs:anyURI Scopes richiesti dal client o previsti dal servizio destinatario EndpointReference wsa:EndpointReference EndpointReference del servizio destinatario
WCF 4.0 DEMO
What is REST? Representional State Transfer E’ principalmente uno stile architetturale, non una specifica Importanza alla risorsa (Content+Capabilities) Utilizzo di tecnologie esistenti: HTTP Http Methods e Status Codes = Uniform Interface Domain-neutral data-oriented formats XML, JSON, Atom/Atom Publishing Le risorse vengono identificate attraverso l’utilizzo di URI Esempio: http://dotnetside.org/users/fabio http://dotnetside.org/users
HTTP Methods Method Descrizione GET Recupera una risorsa E’ in sola lettura Cacheable PUT Aggiorna una risorsa Utilizzato anche per creare le risorse se il client ne conosce l’indirizzo remoto Idempotent DELETE Cancella la risorsa specificata POST Crea una nuova risorsa Unsafe
REST in WCF: WebGet e WebInvoke Due nuovi attributi per definire le operation di WCF Definizione del metodo HTTP da utilizzare WebGet permette operazioni in sola lettura WebInvoke consente di modificare lo stato delle nostre risorse Definizione della URI collegata alla operation: UriTemplate Definizione del formato della richiesta e della risposta Attualmente supporta XML e JSON
REST in WCF: UriTemplate Consente di definire la struttura dell’URI e dei parametri Nell’URI definiamo anche dei placeholder che rappresentano i parametri del nostro metodo:
REST in WCF: WebHttpBinding Nuovo binding specifico per REST Supporta esclusivamente il protocollo HTTP Sicurezza solo a livello di trasporto (HTTPS) Supporto per i seguenti formati: XML JSON Binary
REST in WCF: WebServiceHost Estende il ServiceHost Aggiunge le funzionalità necessarie per l’esecuzione di servizi REST Configurazione automatica del WebHttpBinding e del WebHttpBehavior WebOperationContext Accesso al contesto HTTP
Improvements in WCF 4.0 Gestione della cache con AspNetCacheProfile Generazione della pagina di Help
Developing REST services with WCF DEMO
GRAZIE
Un grazie di cuore a tutti gli sponsor!
GraZIE PER L’ATTENZIONE La vostra opinione per noi è fondamentale: compilate il modulo di feedback! GraZIE PER L’ATTENZIONE