Condividi tramite


Collegamenti ed elementi di collegamento

Le associazioni sono raccolte di elementi di configurazione speciali, denominati elementi di associazione, che vengono valutati dal runtime del servizio ogni volta che viene costruito un endpoint client o di servizio. Il tipo e l'ordine degli elementi di associazione all'interno di un'associazione determinano la selezione e l'ordine di sovrapposizione dei canali di protocollo e trasporto nello stack di canali di un endpoint.

Le associazioni, in particolare le associazioni fornite dal sistema, in genere hanno anche una serie di proprietà di configurazione che riflettono le proprietà più comunemente modificate degli elementi di associazione incapsulati.

Un'associazione deve contenere esattamente un elemento di associazione di trasporto. Ogni elemento di associazione del trasporto implica un elemento di associazione di codifica dei messaggi predefinito, che può essere sottoposto a override aggiungendo al massimo un elemento di associazione di codifica dei messaggi all'associazione. Oltre agli elementi di associazione del trasporto e del codificatore, l'associazione può contenere un numero qualsiasi di elementi di associazione del protocollo che insieme implementano la funzionalità necessaria per il servizio e inviano un messaggio SOAP da un endpoint a un altro. Per informazioni dettagliate, vedere Uso di associazioni per configurare servizi e client.

Estensione di associazioni ed elementi di associazione

Windows Communication Foundation (WCF) include associazioni fornite dal sistema che coprono un'ampia gamma di scenari. Per altre informazioni, vedere System-Provided Bindings. Ci possono essere momenti, tuttavia, in cui è necessario creare e utilizzare un'associazione che non è inclusa in WCF. Gli scenari seguenti richiedono la creazione di una nuova associazione.

  • Per utilizzare un nuovo elemento di associazione , ad esempio un nuovo elemento di associazione di trasporto, codifica o protocollo, è necessario creare una nuova associazione che includa tale elemento di associazione. Ad esempio, se è stato aggiunto un oggetto personalizzato UdpTransportBindingElement per il trasporto UDP, è necessario creare una nuova associazione per usarla. Per informazioni sull'esecuzione di questo comportamento utilizzando il tipo System.ServiceModel.Channels.CustomBinding, vedere Binding personalizzati.

  • Per configurare gli elementi di associazione esistenti in modo che le associazioni fornite dal sistema non siano esposte come proprietà pubbliche. Ad esempio, è necessario creare una nuova associazione per modificare l'ordine in cui vengono eseguite le operazioni di firma e crittografia. Per maggiori dettagli su come eseguire questo comportamento, vedere Procedura: Personalizzare un collegamento System-Provided.

  • Per stabilire associazioni standard aziendali che espongono solo opzioni di configurazione specifiche. Ad esempio, per creare una variante di WSHttpBinding per l'azienda in cui la sicurezza non può essere disabilitata, creare una nuova associazione che si comporta come WSHttpBinding, ma con la sicurezza sempre attiva. Per informazioni dettagliate, vedere Creazione di associazioni User-Defined.

  • Per eseguire alcune personalizzazioni dei metadati, in genere ma non necessariamente per configurare o usare un elemento di associazione personalizzato. Per altre informazioni sul supporto dei metadati per associazioni ed elementi di associazione, vedere Supporto di configurazione e metadati.

Canali, vincolature ed elementi di vincolatura

Le associazioni e gli elementi di associazione rappresentano il collegamento al modello di programmazione dell'applicazione, che include gli attributi e i comportamenti, e al modello di canale, che include i fabbricanti e i listener, i codificatori di messaggi e le implementazioni di trasporto e protocollo. In genere, gli elementi di associazione e le associazioni vengono implementati per consentire l'uso dei canali da parte del livello dell'applicazione.

Il livello del canale invia o riceve messaggi al livello di servizio e trasporta tali messaggi tra gli endpoint. In un client, il livello del canale è uno stack di fabbriche di canali che creano canali verso un endpoint di rete. In un servizio, il layer del canale è uno stack di ascoltatori di canali che accettano i canali ricevuti a un endpoint di rete.

Esistono due tipi generali di canali: canali di protocollo e canali di trasporto. I canali di trasporto sono responsabili della trasmissione effettiva di un messaggio da un endpoint di rete a un altro. I canali di trasporto devono avere un codificatore di messaggi predefinito e devono essere in grado di usare un codificatore di messaggi alternativo fornito tramite un elemento di associazione del codificatore di messaggi. Un codificatore di messaggi è responsabile della trasformazione di un componente System.ServiceModel.Channels.Message in una rappresentazione binaria e viceversa. I canali del protocollo sono responsabili dell'implementazione di protocolli a livello SOAP, ad esempio WS-Security o WS-ReliableMessaging.

Il requisito principale per i canali di trasporto e protocollo è che implementano le interfacce di canale necessarie. Per creare un livello di canale funzionante, è necessario che siano associate fabbriche e ascoltatori e così via. Per usare le implementazioni del canale da WCF, è necessario che siano presenti elementi di associazione associati derivati da BindingElement per ogni canale e che sia presente un elemento di estensione di associazione correlato per l'inclusione in file di configurazione che derivano da BindingElementExtensionElement.

Come accennato in precedenza, gli elementi di associazione per codificatori di messaggi, protocolli e implementazioni del canale di trasporto possono essere impilati per formare uno stack di canali e il meccanismo per allinearli in un set ordinato è l'associazione. Le associazioni e gli elementi di associazione connettono il modello di programmazione dell'applicazione al modello di canale. È possibile usare direttamente le implementazioni del canale dal codice, ma i codificatori, i trasporti e i protocolli non possono essere utilizzati dal modello di programmazione del livello di servizio a meno che non vengano implementati come elementi di associazione.

Per informazioni dettagliate sullo sviluppo di canali e sui relativi elementi di associazione, vedere Estensione del livello canale.