43
Fare clic per modificare lo stile del titolo • Fare clic per modificare stili del testo dello schema – Secondo livello • Terzo livello – Quarto livello » Quinto livello WINDOWS COMMUNICATION FOUNDATION Fabio Cozzolino DotNetSide [email protected]

Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Embed Size (px)

Citation preview

Page 1: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

WINDOWS COMMUNICATION

FOUNDATIONFabio Cozzolino

[email protected]

Page 2: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Agenda

• Overview– SOA– L’ABC di WCF– I Behaviors

• WCF 4.0• REST– SOA vs REST

• WCF Tips & Tricks

Page 3: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

SOA Tenets• Boundaries are Explicit• Services are Autonomous• Services Shares Schema and Contracts, not Classes or Types• Compatibility is Policy-Based

Page 4: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 5: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 6: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 7: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

EndPoint

Address, Binding, Contract

ConsumerConsumer ProviderProvider

Contract(cosa)

Contract(cosa)

Binding(come)

Binding(come)

Address(dove)

Address(dove)

CC BB AA AA BB CC

Messaggio

AA BB CC

AA BB CC

Behaviours

Page 8: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 9: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 10: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Contract• Identifica le informazioni scambiate dal servizio• Esistono tre tipi di contratto:– Service contract (WSDL)– Message contract (SOAP) – Data contract (Xml Schema)

Page 11: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 12: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

WCF Hosting

• Self-hosting– 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...

Page 13: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

DEMOImplementazione di un servizio in WCF

Page 14: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Windows Communication Foundation 4.0

• Configuration-free services• Service Discovery with WS-Discovery• Routing Service• Event Tracing for Windows

Page 15: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Endpoint Configuration in 3.x

vdir2

Web.config

Echo.svc

A B C

Service

http://host

vdir2

vdir1

Page 16: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Default Endpoints

Echo.svc

A B C

Service

Scheme Binding

http:// BasicHttpBinding

… …

Protocol Mapping

ServiceHost.AddDefaultEndpoints()

vdir2

Echo.svc

http://host

vdir2

vdir1

Page 17: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livelloWeb.

config

Default Bindings

A B C

Service

vdir2

Echo.svc

http://host

vdir2

vdir1

<system.serviceModel> <bindings> <basicHttpBinding> <binding name="" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/> </basicHttpBinding> </bindings></system.serviceModel>

Gli endpoints di tipo BasicHttpBinding utilizzano la configurazione dal default binding che recuperano nella gerarchia dei file di configurazione

Page 18: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Web.config

Default Behaviors

A B C Bv

Service

vdir2

Echo.svc

http://host

vdir2

vdir1

<system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceThrottling maxConcurrentCalls="32"/> </behavior> </serviceBehaviors> </behaviors></system.serviceModel>

Un servizio o un endpoint ottengono il behavior di default recuperandolo dalla gerarchia dei file di configurazione

Web.config

Otteniamo un merge dei behaviour ereditati con i behaviour del config corrente

Bv

<system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors></system.serviceModel>

Page 19: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

ROUTING SERVICE IN WCF 4.0

Page 20: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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 Custom

Page 21: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Message Routing

Client

HospitalService

RoutingService

Lab Service

Action = http://healthcare/labservice

Action = http://healthcare/hospitalservice

Page 22: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Protocol Bridging

Client ServiceRoutingService

BasicHttp Net.TcpSOAP 1.1 SOAP 1.2

Page 23: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Security

Client ServiceRoutingService

Message sent usingClient Identity

Message sent usingRouting Service IdentityMessage sent usingClient Identity

Impersonation using WindowsIdentityToken

Page 24: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Error Handling

Client

BackupLab

Service

RoutingService

LabService

MessageFilter Endpoint AlternateEndpoints

action == http://healthcare/LabService

LabService BackupLabService

Page 25: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

WS-DISCOVERY IN WCF 4.0

Page 26: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 27: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Ad-hoc Discovery

Hello

Hello

Chat App:Steve

Chat App:Ed

Chat App:Jurgen

Hello

Steve Online

Steve Online

Page 28: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Ad-hoc Discovery

Chat App:Steve

Chat App:Ed

Chat App:Jurgen Probe

Probe

Probe ProbeMatch

ProbeMatch

Page 29: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Ad-hoc Discovery

Bye

Bye

Chat App:Steve

Chat App:Ed

Chat App:Jurgen

Bye

Steve Offline

Steve Offline

Page 30: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Managed Discovery

Probe

ProbeHello

Probe

Hello

ProbeMatch

Jurgen

Chat App:Jurgen

Chat App:Steve

Proxy Available

Discovery Proxy

Page 31: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 32: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

DEMOWCF 4.0

Page 33: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 34: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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• Idempotent

POST • Crea una nuova risorsa• Unsafe

Page 35: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 36: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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:

Page 37: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 38: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

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

Page 39: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Improvements in WCF 4.0

• Gestione della cache con AspNetCacheProfile

• Generazione della pagina di Help

Page 40: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

DEMODeveloping REST services with WCF

Page 41: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

GRAZIE

Page 42: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

Un grazie di cuore a tutti gli sponsor!

Page 43: Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto

Fare clic per modificare lo stile del titolo

• Fare clic per modificare stili del testo dello schema– Secondo livello• Terzo livello

– Quarto livello» Quinto livello

GRAZIE PER L’ATTENZIONE

La vostra opinione per noi è fondamentale: compilate

il modulo di feedback!