Condividi tramite


Concetti fondamentali di Windows Communication Foundation

Questo documento offre una visualizzazione generale dell'architettura di Windows Communication Foundation (WCF). È progettato per spiegare i concetti chiave e come si adattano insieme. Per un'esercitazione sulla creazione della versione più semplice di un servizio e di un client WCF, vedere Esercitazione introduttiva. Per informazioni sulla programmazione WCF, vedere Programmazione WCF di base.

Nozioni fondamentali su WCF

WCF è un runtime e un set di API per la creazione di sistemi che inviano messaggi tra servizi e client. Le stesse API e l'infrastruttura vengono usate per creare applicazioni che comunicano con altre applicazioni nello stesso sistema informatico o in un sistema che risiede in un'altra società ed è accessibile tramite Internet.

Messaggistica ed endpoint

WCF si basa sulla nozione di comunicazione basata su messaggi e qualsiasi elemento che può essere modellato come messaggio ,ad esempio una richiesta HTTP o un messaggio di accodamento messaggi (noto anche come MSMQ) può essere rappresentato in modo uniforme nel modello di programmazione. In questo modo viene abilitata un'API unificata in diversi meccanismi di trasporto.

Il modello distingue tra i client, ovvero le applicazioni che avviano la comunicazione e i servizi, che sono applicazioni che attendono che i client comunichino con loro e rispondano a tale comunicazione. Una singola applicazione può fungere sia da client che da servizio. Per esempi, vedere Servizi Duplex e Rete Peer-to-Peer.

I messaggi vengono inviati tra endpoint. Gli endpoint sono posizioni in cui i messaggi vengono inviati o ricevuti (o entrambi) e definiscono tutte le informazioni necessarie per lo scambio di messaggi. Un servizio espone uno o più endpoint applicazione (oltre a zero o più endpoint dell'infrastruttura) e il client genera un endpoint compatibile con uno degli endpoint del servizio.

Un endpoint descrive in modo standard dove devono essere inviati i messaggi, come devono essere inviati e come devono essere inviati i messaggi e come dovrebbero essere visualizzati i messaggi. Un servizio può esporre queste informazioni come metadati che i client possono elaborare per generare client WCF appropriati e stack di comunicazione.

Protocolli di comunicazione

Un elemento obbligatorio dello stack di comunicazione è il protocollo di trasporto. I messaggi possono essere inviati su Intranet e Internet usando trasporti comuni, ad esempio HTTP e TCP. Sono inclusi altri trasporti che supportano la comunicazione con applicazioni di Message Queuing e nodi su una rete mesh peer. È possibile aggiungere altri meccanismi di trasporto usando i punti di estensione predefiniti di WCF.

Un altro elemento obbligatorio nello stack di comunicazione è la codifica che specifica la formattazione di qualsiasi messaggio specificato. WCF fornisce le codifiche seguenti:

  • Codifica del testo, codifica interoperativa.

  • Codifica MTOM (Message Transmission Optimization Mechanism), un modo interoperativa per l'invio efficiente di dati binari non strutturati da e verso un servizio.

  • Codifica binaria per un trasferimento efficiente.

È possibile aggiungere più meccanismi di codifica, ad esempio una codifica di compressione, usando i punti di estensione predefiniti di WCF.

Modelli di messaggio

WCF supporta diversi modelli di messaggistica, tra cui la comunicazione request-reply, unidirezionale e duplex. I diversi trasporti supportano modelli di messaggistica diversi e quindi influiscono sui tipi di interazioni supportati. Le API WCF e il runtime consentono anche di inviare messaggi in modo sicuro e affidabile.

Termini WCF

Altri concetti e termini usati nella documentazione di WCF includono quanto segue:

Messaggio Unità autonoma di dati che può essere costituita da diverse parti, tra cui un corpo e le intestazioni.

Servizio Costrutto che espone uno o più endpoint, con ogni endpoint che espone una o più operazioni del servizio.

Endpoint Costrutto in corrispondenza del quale i messaggi vengono inviati o ricevuti (o entrambi). Comprende una posizione (un indirizzo) che definisce dove inviare i messaggi, una specifica del meccanismo di comunicazione (un'associazione) che descrive come inviare i messaggi e una definizione per un set di messaggi che possono essere inviati o ricevuti (o entrambi) in tale posizione (un contratto di servizio) che descrive il messaggio che può essere inviato.

Un servizio WCF viene esposto al mondo come raccolta di endpoint.

Endpoint dell'applicazione Endpoint esposto dall'applicazione che corrisponde a un contratto di servizio implementato dall'applicazione.

Endpoint dell'infrastruttura Endpoint esposto dall'infrastruttura per facilitare le funzionalità necessarie o fornite dal servizio che non sono correlate a un contratto di servizio. Ad esempio, un servizio potrebbe avere un endpoint dell'infrastruttura che fornisce informazioni sui metadati.

Indirizzo Specifica il percorso in cui vengono ricevuti i messaggi. Viene specificato come URI (Uniform Resource Identifier). La parte dello schema URI denomina il meccanismo di trasporto da usare per raggiungere l'indirizzo, ad esempio HTTP e TCP. La parte gerarchica dell'URI contiene una posizione univoca il cui formato dipende dal meccanismo di trasporto.

L'indirizzo endpoint consente di creare indirizzi endpoint univoci per ogni endpoint in un servizio o, in determinate condizioni, per condividere un indirizzo tra gli endpoint. L'esempio seguente mostra un indirizzo che usa il protocollo HTTPS con una porta non predefinita:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Rilegatura Definisce il modo in cui un endpoint comunica con il mondo. Viene costruito di un set di componenti denominati elementi di associazione che "impilano" uno sopra l'altro per creare l'infrastruttura di comunicazione. Almeno, un'associazione definisce il trasporto (ad esempio HTTP o TCP) e la codifica usata (ad esempio testo o binario). Un'associazione può contenere elementi di associazione che specificano dettagli come i meccanismi di sicurezza usati per proteggere i messaggi o il modello di messaggio usato da un endpoint. Per altre informazioni, vedere Configurazione dei servizi.

Elemento binding Rappresenta una parte particolare dell'associazione, ad esempio un trasporto, una codifica, un'implementazione di un protocollo a livello di infrastruttura (ad esempio WS-ReliableMessaging) o qualsiasi altro componente dello stack di comunicazione.

Comportamenti Componente che controlla vari aspetti di runtime di un servizio, un endpoint, una particolare operazione o un client. I comportamenti vengono raggruppati in base all'ambito: i comportamenti comuni influiscono su tutti gli endpoint a livello globale, i comportamenti del servizio influiscono solo sugli aspetti correlati al servizio, i comportamenti degli endpoint influiscono solo sulle proprietà correlate all'endpoint e sui comportamenti a livello di operazione influiscono su operazioni specifiche. Ad esempio, un esempio di comportamento del servizio è la regolazione, che specifica come un servizio reagisce quando un eccesso di messaggi minaccia di sovraccaricare le funzionalità di gestione. Un comportamento dell'endpoint, d'altra parte, controlla solo gli aspetti rilevanti per gli endpoint, ad esempio come e dove trovare le credenziali di sicurezza.

Associazioni fornite dal sistema WCF include diverse associazioni fornite dal sistema. Si tratta di raccolte di elementi di associazione ottimizzati per scenari specifici. Ad esempio, WSHttpBinding è progettato per l'interoperabilità con i servizi che implementano varie specifiche WS-*. Queste associazioni predefinite consentono di risparmiare tempo presentando solo le opzioni che possono essere applicate correttamente allo scenario specifico. Se un'associazione predefinita non soddisfa i requisiti, è possibile creare un'associazione personalizzata.

Configurazione e codifica Il controllo di un'applicazione può essere eseguito tramite la codifica, tramite la configurazione o tramite una combinazione di entrambi. La configurazione ha il vantaggio di consentire a un altro utente diverso dallo sviluppatore (ad esempio, un amministratore di rete) di impostare i parametri del client e del servizio dopo la scrittura del codice e senza dover ricompilare. La configurazione consente non solo di impostare valori come gli indirizzi endpoint, ma consente anche un ulteriore controllo consentendo di aggiungere endpoint, associazioni e comportamenti. La codifica consente allo sviluppatore di mantenere un controllo rigoroso su tutti i componenti del servizio o del client e tutte le impostazioni eseguite tramite la configurazione possono essere controllate e, se necessario, sottoposte a override dal codice.

Operazione del servizio Procedura definita nel codice di un servizio che implementa la funzionalità per un'operazione. Questa operazione viene esposta ai client come metodi in un client WCF. Il metodo può restituire un valore e può accettare un numero facoltativo di argomenti o non accettare argomenti e non restituire alcuna risposta. Ad esempio, un'operazione che funziona come semplice "Hello" può essere usata come notifica della presenza di un client e per avviare una serie di operazioni.

Contratto di servizio Collega più operazioni correlate in una singola unità funzionale. Il contratto può definire impostazioni a livello di servizio, ad esempio lo spazio dei nomi del servizio, un contratto di callback corrispondente e altre impostazioni di questo tipo. Nella maggior parte dei casi, il contratto viene definito creando un'interfaccia nel linguaggio di programmazione preferito e applicando l'attributo ServiceContractAttribute all'interfaccia. Il codice effettivo del servizio risulta dall'implementazione dell'interfaccia.

Contratto dell'operazione Un contratto di operazione definisce i parametri e il tipo restituito di un'operazione. Quando si crea un'interfaccia che definisce il contratto di servizio, si firma un contratto di operazione applicando l'attributo OperationContractAttribute a ogni definizione di metodo che fa parte del contratto. Le operazioni possono essere modellate come accettare un singolo messaggio e restituire un singolo messaggio oppure come accettare un set di tipi e restituire un tipo. In quest'ultimo caso, il sistema determinerà il formato per i messaggi che devono essere scambiati per tale operazione.

Contratto di messaggio Descrive il formato di un messaggio. Ad esempio, dichiara se gli elementi del messaggio devono essere inseriti nelle intestazioni piuttosto che nel corpo, quale livello di sicurezza applicare agli elementi del messaggio e così via.

Contratto di errore Può essere associato a un'operazione del servizio per indicare gli errori che possono essere restituiti al chiamante. A un'operazione possono essere associati zero o più errori. Questi errori sono errori SOAP modellati come eccezioni nel modello di programmazione.

Contratto dati Descrizioni nei metadati dei tipi di dati utilizzati da un servizio. Ciò consente ad altri utenti di interagire con il servizio. I tipi di dati possono essere usati in qualsiasi parte di un messaggio, ad esempio come parametri o tipi restituiti. Se il servizio usa solo tipi semplici, non è necessario usare in modo esplicito i contratti dati.

Hosting Un servizio deve essere ospitato in un determinato processo. Un host è un'applicazione che controlla la durata del servizio. I servizi possono essere self-hosted o gestiti da un processo di hosting esistente.

Servizio self-hosted Servizio eseguito all'interno di un'applicazione di processo creata dallo sviluppatore. Lo sviluppatore ne controlla la durata, imposta le proprietà del servizio, apre il servizio (che lo imposta in modalità di ascolto) e chiude il servizio.

Processo di hosting Applicazione progettata per ospitare i servizi. Tra cui Internet Information Services (IIS), Servizi attivazione Windows (WAS) e Servizi Windows. In questi scenari ospitati, l'host controlla la durata del servizio. Ad esempio, usando IIS è possibile configurare una directory virtuale contenente l'assembly del servizio e il file di configurazione. Quando viene ricevuto un messaggio, IIS avvia il servizio e ne controlla la durata.

Istanziamento Un servizio ha un modello di istanziamento. Esistono tre modelli di istanze: "single", in cui un singolo oggetto CLR esegue il servizio di tutti i client; " per chiamata", in cui viene creato un nuovo oggetto CLR per gestire ogni chiamata client; e "per sessione", in cui viene creato un set di oggetti CLR, uno per ogni sessione separata. La scelta di un modello di istanze dipende dai requisiti dell'applicazione e dal modello di utilizzo previsto del servizio.

Applicazione client Programma che scambia messaggi con uno o più endpoint. L'applicazione client inizia creando un'istanza di un client WCF e chiamando i metodi del client WCF. È importante notare che una singola applicazione può essere sia un client che un servizio.

Canale Implementazione concreta di un elemento di associazione. L'associazione rappresenta la configurazione e il canale è l'implementazione associata a tale configurazione. È pertanto presente un canale associato a ogni elemento di associazione. I canali si sovrappongono tra loro per creare l'implementazione concreta del vincolo: la pila di canali.

Client WCF Costrutto dell'applicazione client che espone le operazioni del servizio come metodi (nel linguaggio di programmazione .NET Framework preferito, ad esempio Visual Basic o Visual C#). Qualsiasi applicazione può ospitare un client WCF, inclusa un'applicazione che ospita un servizio. Pertanto, è possibile creare un servizio che includa i client WCF di altri servizi.

Un client WCF può essere generato automaticamente usando lo strumento Utilità metadati ServiceModel (Svcutil.exe) e puntandolo a un servizio in esecuzione che pubblica i metadati.

Metadati In un servizio vengono descritte le caratteristiche del servizio che un'entità esterna deve comprendere per comunicare con il servizio. I metadati possono essere utilizzati dallo strumento utilità metadati ServiceModel (Svcutil.exe) per generare un client WCF e la configurazione associata che un'applicazione client può usare per interagire con il servizio.

I metadati esposti dal servizio includono documenti XML Schema, che definiscono il contratto dati del servizio e i documenti WSDL, che descrivono i metodi del servizio.

Se abilitata, i metadati per il servizio vengono generati automaticamente da WCF controllando il servizio e i relativi endpoint. Per pubblicare metadati da un servizio, è necessario abilitare in modo esplicito il comportamento dei metadati.

Sicurezza In WCF, include la riservatezza (crittografia dei messaggi per impedire intercettazioni), l'integrità (il mezzo per il rilevamento della manomissione del messaggio), l'autenticazione (il mezzo per la convalida di server e client) e l'autorizzazione (il controllo dell'accesso alle risorse). Queste funzioni vengono fornite usando meccanismi di sicurezza esistenti, ad esempio TLS su HTTP (noto anche come HTTPS) o implementando una o più delle varie specifiche di sicurezza WS-*.

Modalità di sicurezza del trasporto Specifica che la riservatezza, l'integrità e l'autenticazione vengono fornite dai meccanismi del livello di trasporto (ad esempio HTTPS). Quando si usa un trasporto come HTTPS, questa modalità ha il vantaggio di essere efficiente nelle prestazioni e ben compresa a causa della sua prevalenza su Internet. Lo svantaggio è che questo tipo di sicurezza viene applicato separatamente a ogni salto nel percorso di comunicazione, rendendo la comunicazione vulnerabile a un attacco 'man-in-the-middle'.

Modalità di sicurezza dei messaggi Specifica che la sicurezza viene fornita implementando una o più specifiche di sicurezza, ad esempio la specifica denominata Sicurezza dei servizi Web: SOAP Message Security. Ogni messaggio contiene i meccanismi necessari per garantire la sicurezza durante il transito e consentire ai ricevitori di rilevare manomissioni e decrittografare i messaggi. In questo senso, la protezione è incapsulata all'interno di ogni messaggio, garantendo una sicurezza end-to-end attraverso più passaggi. Poiché le informazioni di sicurezza diventano parte del messaggio, è anche possibile includere più tipi di credenziali con il messaggio (dette attestazioni). Questo approccio ha anche il vantaggio di consentire al messaggio di viaggiare in modo sicuro su qualsiasi trasporto, inclusi più trasporti tra l'origine e la destinazione. Lo svantaggio di questo approccio è la complessità dei meccanismi crittografici impiegati, con implicazioni in termini di prestazioni.

Trasporto con modalità di sicurezza delle credenziali dei messaggi Specifica l'uso del livello di trasporto per fornire riservatezza, autenticazione e integrità dei messaggi, mentre ognuno dei messaggi può contenere più credenziali (attestazioni) richieste dai ricevitori del messaggio.

WS-* Sintassi abbreviata per il set crescente di specifiche WS (Web Service), ad esempio WS-Security, WS-ReliableMessaging e così via, implementate in WCF.

Vedere anche