Contratti

In questa sezione viene illustrato come definire e implementare contratti Windows Communication Foundation (WCF). Un contratto di servizio specifica quale endpoint comunica con il mondo esterno. A un livello più concreto, è un'istruzione su un insieme di messaggi specifici organizzati in modelli di scambio di messaggi di base (MEP, Message Exchange Pattern) quali, ad esempio, request/reply, unidirezionale e duplex. Se un contratto di servizio è un insieme logicamente correlato di scambi di messaggi, un'operazione di servizio è un singolo scambio di messaggi. Un'operazione Hello deve, ad esempio, accettare un messaggio (quindi il chiamante può annunciare il saluto) e può o non può restituire un messaggio (a seconda del livello di cortesia dell'operazione).

Per ulteriori informazioni su contratti e altri concetti WCF di base, vedere Concetti fondamentali di Windows Communication Foundation. Questo argomento si concentra sulla comprensione dei contratti di servizio. Per ulteriori informazioni su come creare client che utilizzino contratti di servizio per connettersi ai servizi, vedere Panoramica dei client WCF. Per ulteriori informazioni sui canali client, l'architettura client e altri problemi relativi ai client, vedere Client.

Panoramica

In questo argomento viene fornito un orientamento concettuale di alto livello alla progettazione e all'implementazione di servizi WCF. Negli argomenti correlati vengono fornite informazioni più dettagliate sulle specifiche di progettazione e implementazione. Prima di progettare e implementare l'applicazione WCF, è consigliabile:

  • Comprendere cosa siano i contratti di servizio, come funzionino e come sia possibile crearne uno.
  • Comprendere che i contratti prevedono requisiti minimi che la configurazione di runtime o l'ambiente host potrebbe non supportare.

Contratti di servizio

Un contratto di servizio è un'istruzione che fornisce informazioni sugli argomenti seguenti:

  • Raggruppamento di operazioni in un servizio.
  • Forma delle operazioni in termini di messaggi scambiati.
  • Tipi di dati di questi messaggi.
  • Posizione delle operazioni.
  • Protocolli e formati di serializzazione specifici utilizzati per supportare la corretta comunicazione con il servizio.

Un contratto di ordine di acquisto può, ad esempio, includere un'operazione CreateOrder che accetta un input di tipi di informazioni sull'ordine e restituisce informazioni sull'esito positivo o negativo, incluso un identificatore di ordine. Può inoltre includere un'operazione GetOrderStatus che accetta un identificatore di ordine e restituisce informazioni sullo stato dell'ordine. Un contratto di servizio di questo tipo specificherebbe:

  • Che il contratto di ordine di acquisto è costituito da operazioni CreateOrder e GetOrderStatus.
  • Che le operazioni hanno specificato messaggi di input e di output.
  • I dati che questi messaggi possono contenere.
  • Istruzioni categoriali sull'infrastruttura di comunicazione necessaria per elaborare correttamente i messaggi. Questi dettagli includono, ad esempio, indicazioni sulla necessità della protezione, e sui tipi di protezione eventualmente necessari, per stabilire una corretta comunicazione.

Per comunicare questo tipo di informazioni alle applicazioni su altre piattaforme (incluse piattaforme non Microsoft), i contratti di servizio XML vengono pubblicamente espressi in formati XML standard tra cui, ad esempio, WSDL e lo schema XML (XSD). Gli sviluppatori operanti su molte piattaforme possono utilizzare queste informazioni pubbliche sui contratti per creare applicazioni che possano comunicare con il servizio, perché comprendono il linguaggio della specifica e perché tali linguaggi sono progettati per consentire l'interoperabilità descrivendo i tipi, i formati e i protocolli pubblici supportati dal servizio. Per ulteriori informazioni su come WCF gestisce questo tipo di informazioni, vedere Metadata.

I contratti possono essere però espressi in molti modi e, sebbene WSDL e XSD siano linguaggi eccellenti per descrivere i servizi in maniera accessibile, sono però difficili da utilizzare in modo diretto e sono, in ogni caso, semplici descrizioni di un servizio, che non riguardano le implementazioni del contratto di servizio. Pertanto, le applicazioni WCF utilizzano interfacce, classi e attributi gestiti sia per definire la struttura di un servizio sia per implementare il servizio in questione.

Il contratto risultante, definito in tipi gestiti, può essere convertito (esportato) in metadati, WSDL e XSD, quando ciò sia richiesto dai client o da altri implementatori di servizi, specialmente su altre piattaforme. Il risultato è un modello di programmazione semplice, che può essere descritto utilizzando metadati pubblici per qualsiasi applicazione client. I dettagli dei messaggi SOAP sottostanti, quali ad esempio le informazioni sul trasporto e sulla protezione, possono essere gestiti da WCF, che esegue automaticamente le conversioni necessarie tra il sistema dei tipi di contratto di servizio e il sistema dei tipi XML.

Per ulteriori informazioni sulla progettazione di contratti, vedere Progettazione dei contratti di servizio. Per ulteriori informazioni sull'implementazione di contratti, vedere Implementazione dei contratti di servizio.

Inoltre, WCF consente di sviluppare contratti di servizio interamente a livello di messaggio. Per ulteriori informazioni sullo sviluppo di contratti di servizio a livello di messaggio, vedere Utilizzo dei contratti di messaggio. Per ulteriori informazioni sullo sviluppo di servizi in linguaggio XML non SOAP, vedere Interoperabilità con applicazioni POX.

Informazioni sulla gerarchia di requisiti

Un contratto di servizio raggruppa le operazioni, specifica il MEP, i tipi di messaggio e i tipi di dati contenuti nei messaggi e indica le categorie di comportamento di runtime che un'implementazione deve avere per supportare il contratto (se, ad esempio, è necessario che i messaggi siano crittografati e firmati). Il contratto di servizio stesso non specifica, tuttavia, con precisione in che modo questi requisiti siano soddisfatti, indica solo che devono essere soddisfatti. Il tipo di crittografia e la modalità di firma di un messaggio dipendono dall'implementazione e dalla configurazione di un servizio compatibile.

Si noti il modo in cui il contratto richiede certe caratteristiche dell'implementazione del contratto di servizio e della configurazione di runtime per l'aggiunta di un comportamento. L'insieme dei requisiti che devono essere soddisfatti per esporre un servizio affinché possa essere utilizzato si basa sull'insieme di requisiti precedente. Se un contratto prevede requisiti per l'implementazione, un'implementazione può richiedere ancora più caratteristiche di configurazione e associazioni che consentono l'esecuzione del servizio. Infine, anche l'applicazione host deve supportare tutti i requisiti aggiunti dalla configurazione e dalle associazioni del servizio.

Questo processo relativo ai requisiti aggiuntivi è importante da tener presente quando si progetta, implementa, configura e ospita l'applicazione del servizio Windows Communication Foundation (WCF). Il contratto può, ad esempio, specificare che deve essere supportata una sessione. In questo caso sarà quindi necessario configurare le associazioni per supportare il requisito contrattuale o l'implementazione del servizio non funzionerà. Se il servizio richiede invece l'autenticazione integrata di Windows ed è ospitato in Internet Information Services (IIS), nell'applicazione Web in cui risiede il servizio deve essere attivata l'autenticazione integrata di Windows e disattivato il supporto di utenti anonimi. Per ulteriori informazioni sulle funzionalità e l'impatto dei diversi tipi di applicazioni host dei servizi, vedere Hosting.

Vedere anche

Concetti

Endpoint: indirizzi, associazioni e contratti
Progettazione dei contratti di servizio
Implementazione dei contratti di servizio