Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le associazioni e gli elementi di associazione (rispettivamente oggetti che estendono System.ServiceModel.Channels.Binding e System.ServiceModel.Channels.BindingElement) sono il punto in cui il modello di applicazione Windows Communication Foundation (WCF) è associato alle fabbriche di canali e ai listener di canale. Senza associazioni, l'uso di canali personalizzati richiede la programmazione a livello di canale, come descritto in Programmazione del servizio Channel-Level e Programmazione client Channel-Level. Questo argomento illustra il requisito minimo per abilitare l'uso del canale in WCF, lo sviluppo di un BindingElement per il canale e l'abilitazione dell'uso dall'applicazione come descritto nel passaggio 4 di Sviluppo di canali.
Informazioni generali
La creazione di un BindingElement per il canale consente agli sviluppatori di usarlo in un'applicazione WCF. BindingElement Gli oggetti possono essere usati dalla System.ServiceModel.ServiceHost classe per connettere un'applicazione WCF al canale senza dover specificare le informazioni precise sul tipo del canale.
Dopo aver creato un oggetto BindingElement , è possibile abilitare più funzionalità a seconda dei requisiti seguendo i passaggi di sviluppo del canale rimanenti descritti in Sviluppo di canali.
Aggiunta di un elemento di associazione
Per implementare un oggetto personalizzato BindingElement, scrivere una classe che eredita da BindingElement. Ad esempio, se è stato sviluppato un oggetto ChunkingChannel che può suddividere i messaggi di grandi dimensioni in blocchi e riassemblarli nell'altra estremità, è possibile usare questo canale in qualsiasi associazione implementando un BindingElement oggetto e configurando l'associazione per usarla. Nella parte restante di questo argomento, ChunkingChannel viene utilizzato come esempio per illustrare i requisiti di implementazione di un elemento di associazione.
Un ChunkingBindingElement oggetto è responsabile della creazione di ChunkingChannelFactory e ChunkingChannelListener. Esegue l'override delle implementazioni di CanBuildChannelFactory e CanBuildChannelListener, verificando che il parametro di tipo sia IDuplexSessionChannel (in questo esempio, questa è l'unica forma del canale supportata da ChunkingChannel) e che gli altri elementi di associazione nel binding supportino questa forma del canale.
BuildChannelFactory innanzitutto verifica che la forma del canale richiesta possa essere creata e dopodiché ottiene un elenco di azioni dei messaggi da suddividere. Crea quindi un nuovo oggetto ChunkingChannelFactory, passandolo alla fabbrica di canali interna. Se si sta creando un elemento di associazione di trasporto, tale elemento è l'ultimo nello stack di binding e pertanto deve creare un listener del canale o una channel factory.
BuildChannelListener ha un'implementazione simile per creare ChunkingChannelListener e passandogli il listener del canale interno.
Come altro esempio che usa un canale di trasporto, l'esempio Transport: UDP fornisce l'override seguente.
Nell'esempio l'elemento di associazione è UdpTransportBindingElement, che deriva da TransportBindingElement. Esegue l'override dei seguenti metodi per costruire le factory collegate al canale.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
Contiene anche membri per clonare BindingElement e restituire il nostro schema (soap.udp).
Elementi di associazione del protocollo
I nuovi elementi di associazione possono sostituire o aumentare qualsiasi elemento di associazione incluso, aggiungendo nuovi trasporti, codifiche o protocolli di livello superiore. Per creare un nuovo elemento di associazione protocollo, iniziare estendendo la BindingElement classe . Come minimo, è necessario implementare BindingElement.Clone e ChannelProtectionRequirements usando IChannel.GetProperty. Restituisce l'oggetto ChannelProtectionRequirements per questo elemento di associazione. Per altre informazioni, vedere ChannelProtectionRequirements.
Clone deve restituire una nuova copia di questo elemento di associazione. Come procedura consigliata, è consigliabile che gli autori di elementi di associazione implementino Clone usando un costruttore di copia che chiama il costruttore di copia di base, quindi clona tutti i campi aggiuntivi in questa classe.
Elementi di associazione del trasporto
Per creare un nuovo elemento di associazione di trasporto, estendere l'interfaccia TransportBindingElement . Come minimo, è necessario implementare il Clone metodo e la TransportBindingElement.Scheme proprietà .
Clone : deve restituire una nuova copia di questo elemento di associazione. Come procedura consigliata, è consigliabile che gli autori di elementi di associazione implementino Clone tramite un costruttore di copia che chiama il costruttore di copia di base, quindi clona tutti i campi aggiuntivi in questa classe.
Scheme : la Scheme proprietà get restituisce lo schema URI per il protocollo di trasporto rappresentato dall'elemento di associazione. Ad esempio, System.ServiceModel.Channels.HttpTransportBindingElement e System.ServiceModel.Channels.TcpTransportBindingElement restituiscono "http" e "net.tcp" dalle rispettive Scheme proprietà.
Elementi di associazione di codifica
Per creare nuovi elementi di associazione di codifica, iniziare estendendo la BindingElement classe e implementando la System.ServiceModel.Channels.MessageEncodingBindingElement classe . Come minimo, è necessario implementare i Clonemetodi , MessageEncodingBindingElement.CreateMessageEncoderFactory e la MessageEncodingBindingElement.MessageVersion proprietà .
Clone. Restituisce una nuova copia di questo elemento di associazione. Come procedura consigliata, è consigliabile che gli autori di elementi di associazione implementino Clone usando un costruttore di copia che chiama il costruttore di copia di base, quindi clona tutti i campi aggiuntivi in questa classe.
CreateMessageEncoderFactory. Restituisce un oggetto MessageEncoderFactory, che fornisce un riferimento alla classe effettiva che implementa il nuovo codificatore e che deve estendere MessageEncoder. Per altre informazioni, vedere MessageEncoderFactory e MessageEncoder.
MessageVersion. Restituisce l'oggetto MessageVersion utilizzato in questa codifica, che rappresenta le versioni di SOAP e WS-Addressing in uso.
Per un elenco completo di metodi e proprietà facoltativi per gli elementi di associazione di codifica definiti dall'utente, vedere MessageEncodingBindingElement.
Per altre informazioni sulla creazione di un nuovo elemento di associazione, vedere Creazione di associazioni User-Defined.
Dopo aver creato un elemento di associazione per il canale, tornare all'argomento Developing Channels per verificare se si vuole aggiungere il supporto dei file di configurazione all'elemento di associazione, se e come aggiungere il supporto per la pubblicazione dei metadati e se e come costruire un'associazione definita dall'utente che usa l'elemento di associazione.