Condividi tramite


Concetti fondamentali di Windows Communication Foundation

In questo documento viene fornita una panoramica dettagliata dell'architettura Windows Communication Foundation (WCF). Il documento è concepito per spiegare i concetti principali e le modalità di interazione. 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

Windows Communication Foundation (WCF) è uno strumento runtime e un insieme di API per la creazione di sistemi che inviano messaggi tra servizi e client. La stessa infrastruttura e le stesse API vengono utilizzate per creare applicazioni che comunicano con le altre applicazioni nello stesso computer o su un sistema di un'altra società accessibile tramite Internet.

Messaggistica ed endpoint

WCF è basato sulla nozione di comunicazione basata su messaggi e qualsiasi cosa che può essere modellata come messaggio (ad esempio, una richiesta HTTP o un messaggio MSMQ) può essere rappresentata in modo uniforme nel modello di programmazione. Questo consente un'API unificata su meccanismi di trasporto differenti.

Il modello distingue tra clientche sono applicazioni che iniziano la comunicazione e servizi che sono applicazioni che attendono che i client comunichino con loro e rispondano a quella comunicazione. Una singola applicazione può comportarsi sia come client, sia come servizio.

I messaggi vengono inviati tra endpoint. Gli endpoint sono punti in cui i messaggi vengono inviati o ricevuti (o entrambe le cose) e definiscono tutte le informazioni necessarie per lo scambio di messaggi. Un servizio espone uno o più endpoint dell'applicazione (così come zero o più endpoint dell'infrastruttura) e il client genera un endpoint che è compatibile con uno degli endpoint del servizio.

Un endpoint descrive in modo standard dove i messaggi devono essere inviati, come devono essere inviati e come devono apparire. Un servizio può esporre queste informazioni come metadati che possono essere elaborati dai client 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 tramite Intranet e Internet utilizzando trasporti comuni, ad esempio HTTP e TCP. Sono inclusi altri trasporti che supportano la comunicazione con applicazioni di Accodamento messaggi Microsoft (MSMQ) e nodi su una rete peer. Ulteriori meccanismi di trasporto possono essere aggiunti utilizzando i punti di estensione incorporati di WCF.

Un altro elemento obbligatorio nello stack di comunicazione è la codifica che specifica come ogni messaggio viene formattato. WCF fornisce le codifiche seguenti:

  • Codifica testo, una codifica interoperativa.
  • Codifica Message Transmission Optimization Mechanism (MTOM), una modalità interoperativa per l'invio efficiente di dati binari non strutturati a e da un servizio.
  • Codifica binaria per trasferimenti efficienti.

Ulteriori meccanismi di codifica (ad esempio, una codifica di compressione) possono essere aggiunti utilizzando i punti di estensione incorporati di WCF.

Modelli dei messaggi

WCF supporta numerosi modelli di messaggistica, inclusa la comunicazione request/reply, unidirezionale e duplex. Trasporti differenti supportano modelli di messaggistica differenti e in questo modo influenzano i tipi di interazioni supportati. Il runtime e le API WCF consentono inoltre di inviare messaggi in modo protetto e affidabile.

Termini WCF

Altri concetti e termini utilizzati nella documentazione WCF includono gli elementi seguenti.

  • messaggio
    Un messaggio è un'unità autonoma di dati che può essere costituita da varie parti, incluso corpo e intestazioni.
  • servizio
    Un servizio è un costrutto che espone uno o più endpoint che a loro volta espongono una o più operazioni del servizio.
  • endpoint
    Un endpoint è un costrutto a cui vengono inviati o da cui vengono ricevuti (o entrambe le cose) i messaggi. Comprende un percorso (un indirizzo) che definisce dove i messaggi possono essere inviati, una specifica del meccanismo di comunicazione (un'associazione) che descrive come i messaggi devono essere inviati e una definizione per un insieme di messaggi che possono essere inviati o ricevuti (o entrambe le cose) da quel percorso (un contratto di servizio) che descrive quale messaggio può essere inviato.

    Un servizio WCF viene esposto come un insieme di endpoint.

  • endpoint applicazione
    Endpoint esposto dall'applicazione che corrisponde a un contratto di servizio implementato dall'applicazione.
  • endpoint infrastruttura
    Endpoint esposto dall'infrastruttura per agevolare la funzionalità necessaria o fornita dal servizio che non è correlata a un contratto di servizio. Un servizio, ad esempio, potrebbe avere un endpoint dell'infrastruttura che fornisce informazioni sui metadati.
  • indirizzo
    Un indirizzo specifica il percorso dove i messaggi vengono ricevuti. Viene specificato come Uniform Resource Identifier (URI). La parte relativa allo schema URI denomina il meccanismo di trasporto da utilizzare per raggiungere l'indirizzo, ad esempio HTTP e TCP. La parte gerarchica dell'URI contiene un percorso univoco il cui formato dipende dal meccanismo di trasporto.

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

    HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
    
  • associazione
    Un'associazione definisce come avviene la comunicazione da parte di un endpoint. È costituita da un insieme di componenti chiamati elementi di associazione posizionati uno sopra l'altro in uno stack per creare l'infrastruttura della comunicazione. Un'associazione definisce come minimo il trasporto (ad esempio HTTP o TCP) e la codifica (ad esempio testo o binaria) utilizzati. Un'associazione può contenere elementi di associazione che specificano dettagli come i meccanismi di protezione utilizzati per proteggere i messaggi o il modello del messaggio utilizzato da un endpoint. Per ulteriori informazioni, vedere Configurazione dei servizi.
  • elemento di associazione
    Un elemento di associazione rappresenta una particolare parte 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
    Un comportamento è un componente che controlla vari aspetti in fase di esecuzione di un servizio, di un endpoint, di una particolare operazione o di un client. I comportamenti sono raggruppati in base allo scopo. I comportamenti comuni influiscono globalmente su tutti gli endpoint, i comportamenti del servizio influiscono solo sugli aspetti relativi al servizio, i comportamenti dell'endpoint influiscono solo sulle proprietà relative all'endpoint e i comportamenti a livello di operazione influiscono su particolari operazioni. Un comportamento del servizio, ad esempio, l'azione di limitazione che specifica come un servizio reagisce quando un eccesso di messaggi minaccia di sovraccaricarne le funzionalità di gestione. Un comportamento dell'endpoint, invece, controlla solo gli aspetti pertinenti agli endpoint, ad esempio come e dove trovare una credenziale di protezione.
  • associazioni fornite dal sistema
    WCF include numerose associazioni fornite dal sistema. Si tratta di insiemi di elementi di associazione ottimizzati per scenari specifici. WSHttpBinding è progettata, ad esempio, per l'interoperabilità con servizi che implementano varie specifiche WS-*. Le associazioni predefinite consentono di risparmiare tempo presentando solo quelle opzioni che possono essere applicate correttamente allo scenario specifico. Se un'associazione predefinita non soddisfa i requisiti, è possibile crearne una personalizzata.
  • configurazione e codifica
    Il controllo di un'applicazione può essere eseguito tramite codifica, tramite configurazione o tramite una combinazione di entrambe. La configurazione presenta il vantaggio di consentire a qualcun altro oltre allo sviluppatore, ad esempio a un amministratore di rete, di impostare parametri del client e del servizio dopo che il codice è stato scritto e senza doverlo ricompilare. La configurazione non solo consente di impostare valori come gli indirizzi endpoint ma fornisce anche un maggior controllo consentendo di aggiungere endpoint, associazioni e comportamenti. La codifica consente allo sviluppatore di mantenere uno stretto controllo su tutti i componenti del servizio o del client ed eventuali impostazioni eseguite tramite la configurazione possono essere controllate e se necessario sottoposte a override dal codice.
  • operazione del servizio
    Un'operazione del servizio è una 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ò prendere un numero facoltativo di argomenti oppure può non prendere alcun argomento e può non restituire alcuna risposta. Un'operazione, ad esempio, che funziona come un semplice "Hello" può essere utilizzata come notifica della presenza di un client e per iniziare una serie di operazioni.
  • contratto di servizio
    Il contratto di servizio unisce più operazioni correlate in una sola unità funzionale. Il contratto può definire impostazioni a livello di servizio, ad esempio lo spazio dei nomi del servizio, un contratto callback corrispondente e altre impostazioni simili. Nella maggior parte dei casi, il contratto viene definito creando un'interfaccia nel linguaggio di programmazione selezionato e applicando l'attributo ServiceContractAttribute all'interfaccia. Il codice del servizio effettivo viene determinato implementando l'interfaccia.
  • contratto dell'operazione
    Un contratto dell'operazione definisce i parametri e il tipo restituito di un'operazione. Quando si crea un'interfaccia che definisce il contratto di servizio, si indica un contratto dell'operazione applicando l'attributo OperationContractAttribute a ogni definizione del metodo che fa parte del contratto. Le operazioni possono essere modellate in modo da prendere un solo messaggio e restituire un solo messaggio o in modo da prendere un insieme di tipi e restituire un tipo. Nel secondo caso, il sistema determinerà il formato per i messaggi che devono essere scambiati per quell'operazione.
  • contratto di messaggio
    Un contratto di messaggio descrive il formato di un messaggio. Dichiara, ad esempio, se gli elementi del messaggio devono andare nelle intestazioni invece che nel corpo, quale livello di protezione deve essere applicato e a quali elementi del messaggio e così via.
  • contratto di errore
    Un contratto di errore può essere associato a un'operazione del servizio per individuare errori che possono essere restituiti al chiamante. Un'operazione può avere zero o più errori associati. Si tratta di errori SOAP modellati come eccezioni nel modello di programmazione.
  • contratto dati
    I tipi di dati utilizzati da un servizio devono essere descritti nei metadati per consentire ad altri di interagire con il servizio. Le descrizioni dei tipi di dati sono note come contratto dati e i tipi possono essere utilizzati in qualsiasi parte di un messaggio, ad esempio come parametri o tipi restituiti. Se il servizio utilizza solo tipi semplici, non è necessario utilizzare esplicitamente i contratti dati.
  • hosting
    Un servizio deve essere ospitato in un processo. Un host è un'applicazione che controlla la durata del servizio. I servizi possono essere indipendenti o gestiti da un processo di hosting esistente.
  • servizio indipendente
    Un servizio indipendente è un servizio in esecuzione all'interno di un'applicazione del processo creata dallo sviluppatore. Lo sviluppatore ne controlla la durata, imposta le proprietà del servizio, apre il servizio (impostandolo in modalità di ascolto) e chiude il servizio.
  • processo di hosting
    Un processo di hosting è un'applicazione progettata per ospitare servizi, inclusi Internet Information Services (IIS), Windows Activation Services (WAS) e servizi per Windows. In questi scenari di hosting, l'host controlla la durata del servizio. Utilizzando, ad esempio, IIS è possibile configurare una directory virtuale che contiene l'assembly del servizio e il file di configurazione. Quando un messaggio viene ricevuto, IIS avvia il servizio e ne controlla la durata.
  • istanze
    Un servizio è dotato di un modello di istanze. Sono presenti tre modelli di istanze: "singolo" nel quale un solo oggetto CLR provvede a tutti i client, "per chiamata" nel quale viene creato un nuovo oggetto CLR per gestire ogni chiamata del client e "per sessione" nel quale viene creato un insieme 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
    Un'applicazione client è un programma che scambia messaggi con uno o più endpoint. L'applicazione client inizia creando un'istanza di un client WCF e chiamando metodi del client WCF. È importante notare che una singola applicazione può essere sia un client che un servizio.
  • canale
    Un canale è un'implementazione concreta di un elemento di associazione. L'associazione rappresenta la configurazione e il canale è l'implementazione associata a quella configurazione. È pertanto presente un canale associato a ogni elemento di associazione. I canali si dispongono uno sopra l'altro per creare l'implementazione concreta dell'associazione, lo stack dei canali.
  • client WCF
    Un client WCF è un costrutto dell'applicazione client che espone le operazioni del servizio come metodi (nel linguaggio di programmazione .NET Framework scelto, 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 include client WCF di altri servizi.

    Un client WCF può essere generato automaticamente utilizzando ServiceModel Metadata Utility Tool (Svcutil.exe) e puntandolo a un servizio in esecuzione che pubblica metadati.

  • metadati
    I metadati di un servizio descrivono le caratteristiche del servizio che devono essere comprese da un'entità esterna per comunicare con il servizio. I metadati possono essere utilizzati da ServiceModel Metadata Utility Tool (Svcutil.exe) per generare un client WCF e una configurazione abbinata, che possono essere utilizzati da un'applicazione client per interagire con il servizio.

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

    Se attivati, i metadati per il servizio vengono generati automaticamente da WCF tramite il controllo del servizio e dei relativi endpoint. Per pubblicare metadati da un servizio, è necessario attivare esplicitamente il comportamento dei metadati.

  • protezione
    La protezione in WCF include riservatezza (crittografia dei messaggi per impedire l'intercettazione), integrità (mezzi per il rilevamento di manomissioni del messaggio), autenticazione (mezzi per la convalida di server e client) e autorizzazione (controllo di accesso alle risorse). Queste funzioni vengono fornite basandosi sui meccanismi di protezione esistenti, ad esempio TLS su HTTP (anche noto come HTTPS) o implementando una o più delle varie specifiche di protezione WS-*.
  • modalità di protezione del trasporto
    La protezione può essere fornita in una delle tre modalità seguenti: modalità di trasporto, modalità di protezione del messaggio e trasporto con modalità di credenziale messaggio. La modalità di protezione del trasporto specifica che la riservatezza, l'integrità e l'autenticazione vengono fornite da meccanismi a livello del trasporto (ad esempio HTTPS). In caso di utilizzo di un trasporto come HTTPS, questa modalità presenta il vantaggio di essere efficiente in termini di prestazioni e di essere ben compresa grazie alla sua prevalenza su Internet. Lo svantaggio consiste nel fatto che questo tipo di protezione viene applicato separatamente su ogni hop nel percorso di comunicazione, rendendo quest'ultima vulnerabile a un attacco di tipo " man in the middle".
  • modalità di protezione dei messaggi
    La modalità di protezione dei messaggi specifica che la protezione viene fornita implementando una o più delle specifiche di protezione, ad esempio la specifica denominata "Web Services Security: SOAP Message Security" (disponibile all'indirizzo https://go.microsoft.com/fwlink/? LinkId=94684) (la pagina potrebbe essere in inglese). Ogni messaggio contiene i meccanismi necessari a fornire protezione durante il transito e a consentire ai destinatari di rilevare manomissioni e decrittografare i messaggi. A tale scopo, la protezione viene incapsulata all'interno di ogni messaggio, fornendo protezione end-to-end tra più hop. Poiché le informazioni sulla protezione diventano parte del messaggio, è inoltre possibile includere più tipi di credenziali nel messaggio, denominati attestazioni. Questo approccio presenta inoltre il vantaggio di consentire al messaggio di viaggiare in modo protetto su qualsiasi trasporto, anche se tra l'origine e la destinazione ne esistono diversi. Lo svantaggio di questo approccio consiste nella complessità dei meccanismi di crittografia adottati, con conseguenti implicazioni sulle prestazioni.
  • trasporto con modalità di protezione delle credenziali messaggio
    Questa modalità utilizza il livello del trasporto per fornire riservatezza, autenticazione e integrità dei messaggi, mentre ogni messaggio può contenere più credenziali (attestazioni) richieste dai destinatari del messaggio.
  • WS-*
    Abbreviazione per l'insieme crescente di specifiche Web Service (WS), ad esempio WS-Security, WS-ReliableMessaging e così via, che sono implementate in WCF.

Vedere anche

Concetti

Informazioni su Windows Communication Foundation
Architettura di Windows Communication Foundation
Architettura della protezione