Creazione di una classe BindingElementCreating a BindingElement

Associazioni ed elementi di associazione (oggetti che estendono System.ServiceModel.Channels.Binding e System.ServiceModel.Channels.BindingElement, rispettivamente) costituiscono la sede in cui il modello di applicazione Windows Communication Foundation (WCF) è associato con le channel factory e listener del canale.Bindings and binding elements (objects that extend System.ServiceModel.Channels.Binding and System.ServiceModel.Channels.BindingElement, respectively) are the place where the Windows Communication Foundation (WCF) application model is associated with channel factories and channel listeners. Senza le associazioni, l'utilizzo di canali personalizzati richiede programmazione a livello di canale come descritto in canale del servizio a livello di programmazione e canale Client a livello di programmazione.Without bindings, using custom channels requires programming at the channel level as described in Service Channel-Level Programming and Client Channel-Level Programming. Questo argomento viene illustrato il requisito minimo per consentire l'utilizzo del canale in WCF, lo sviluppo di un BindingElement per il canale e abilita l'uso dell'applicazione come descritto nel passaggio 4 della sviluppo canali.This topic discusses the minimum requirement to enable using your channel in WCF, the development of a BindingElement for your channel, and enable use from the application as described in step 4 of Developing Channels.

PanoramicaOverview

Creazione di un BindingElement per il canale consente agli sviluppatori di utilizzarlo in un'applicazione WCF.Creating a BindingElement for your channel enables developers to use it in an WCF application. BindingElement gli oggetti possano essere utilizzati dal System.ServiceModel.ServiceHost classe connettere un'applicazione WCF per il canale senza le informazioni sul tipo preciso del canale.BindingElement objects can be used from the System.ServiceModel.ServiceHost class to connect an WCF application to your channel without having to the precise type information of your channel.

Una volta un BindingElement è stato creato, è possibile abilitare altre funzionalità, a seconda dei requisiti seguendo i passaggi rimanenti di sviluppo channel descritto in sviluppo canali.Once a BindingElement has been created, you can enable more functionality depending upon your requirements by following the remaining channel development steps described in Developing Channels.

Aggiunta di un elemento di associazione.Adding a Binding Element

Per implementare una classe BindingElement personalizzata, scrivere una classe che eredita da BindingElement.To implement a custom BindingElement, write a class that inherits from BindingElement. Ad esempio, se è stato sviluppato un elemento ChunkingChannel per suddividere i messaggi di grandi dimensioni in blocchi e assemblarli di nuovo sull'altra estremità, è possibile utilizzare questo canale in qualsiasi associazione implementando una classe BindingElement e configurando l'associazione per il relativo utilizzo.For example, if you have developed a ChunkingChannel that can break up large messages into chunks and reassemble them on the other end, you can use this channel in any binding by implementing a BindingElement and configuring the binding to use it. Nella restante parte di questo argomento, verrà utilizzato ChunkingChannel come esempio per illustrare i requisiti dell'implementazione di un elemento di associazione.The remainder of this topic uses the ChunkingChannel as an example to demonstrate the requirements of implementing a binding element.

ChunkingBindingElement è responsabile della creazione di ChunkingChannelFactory e ChunkingChannelListener.A ChunkingBindingElement is responsible for creating the ChunkingChannelFactory and ChunkingChannelListener. Esegue l'override delle implementazioni dei metodi CanBuildChannelFactory e CanBuildChannelListener e controlla che il parametro di tipo sia IDuplexSessionChannel (nell'esempio si tratta dell'unica forma del canale supportata da ChunkingChannel) e che gli altri elementi di associazione presenti nell'associazione supportino tale forma.It overrides CanBuildChannelFactory and CanBuildChannelListener implementations, and checks that the type parameter is IDuplexSessionChannel (in our example this is the only channel shape supported by the ChunkingChannel) and that the other binding elements in the binding support this channel shape.

Il metodo BuildChannelFactory controlla prima che la forma del canale richiesta possa essere creata e poi ottiene un elenco di azioni del messaggio da suddividere in blocchi.BuildChannelFactory first checks that the requested channel shape can be built and then gets a list of message actions to be chunked. Crea quindi una nuova ChunkingChannelFactory, passando la channel factory internaIt then creates a new ChunkingChannelFactory, passing it the inner channel factory. (se si sta creando un elemento di associazione del trasporto, tale elemento è l'ultimo nello stack dell'associazione e pertanto deve necessariamente creare un listener del canale o una channel factory).(If you are creating a transport binding element, that element is the last one in the binding stack and therefore must create a channel listener or channel factory.)

L'implementazione del metodo BuildChannelListener per creare ChunkingChannelListener e passare il listener del canale interno è simile.BuildChannelListener has a similar implementation for creating ChunkingChannelListener and passing it the inner channel listener.

Un altro esempio utilizzando un canale di trasporto, la trasporto: UDP comprende la sostituzione di seguito.As another example using a transport channel, the Transport: UDP sample provides the following override.

Nell'esempio, l'elemento di associazione è UdpTransportBindingElement, che deriva dalla classe TransportBindingElement.In the sample, the binding element is UdpTransportBindingElement, which derives from TransportBindingElement. Esso esegue l'override dei metodi seguenti per creare le factory associate al canale.It overrides the following methods to build the factories associated with the channel.

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 inoltre membri per duplicare BindingElement e restituire lo schema (soap.udp).It also contains members for cloning the BindingElement and returning our scheme (soap.udp).

Elementi di associazione di protocolloProtocol Binding Elements

I nuovi elementi di associazione possono sostituire o aumentare gli elementi di associazione presenti, aggiungendo nuovi trasporti, codifiche o protocolli di livello superiore.New binding elements can replace or augment any of the included binding elements, adding new transports, encodings, or higher-level protocols. Per creare un nuovo elemento di associazione di protocollo, iniziare estendendo la classe BindingElement.To create a new Protocol Binding Element, start by extending the BindingElement class. Come minimo, è necessario quindi implementare il BindingElement.Clone e implementare il ChannelProtectionRequirements utilizzando IChannel.GetProperty.At a minimum, you must then implement the BindingElement.Clone and implement the ChannelProtectionRequirements using IChannel.GetProperty. In questo modo viene restituita la classe ChannelProtectionRequirements per l'elemento di associazione.This returns the ChannelProtectionRequirements for this binding element. Per altre informazioni, vedere ChannelProtectionRequirements.For more information, see ChannelProtectionRequirements.

Il metodo Clone deve restituire una copia aggiornata dell'elemento di associazione.Clone should return a fresh copy of this binding element. È consigliabile che gli autori dell'elemento di associazione implementino il metodo Clone utilizzando un costruttore di copia che chiami il costruttore di copia di base e che quindi duplichi i campi aggiuntivi in questa classe.As a best practice, we recommend that binding element authors implement Clone by using a copy constructor that calls the base copy constructor, then clones any additional fields in this class.

Elementi di associazione del trasportoTransport Binding Elements

Per creare un nuovo elemento di associazione del trasporto, estendere l'interfaccia TransportBindingElement.To create a new Transport Binding Element, extend the TransportBindingElement interface. È necessario quindi implementare almeno il metodo Clone e la proprietà TransportBindingElement.Scheme.At a minimum, you must then implement the Clone method and the TransportBindingElement.Scheme property.

Clone – Deve restituire una copia aggiornata dell'elemento di associazione.Clone – Should return a fresh copy of this Binding Element. È consigliabile che gli autori dell'elemento di associazione implementino Clone mediante un costruttore di copia che chiami il costruttore di copia di base e che quindi duplichi i campi aggiuntivi in questa classe.As a best practice, we recommend that Binding Element authors implement Clone by way of a copy constructor that calls the base copy constructor, then clones any additional fields in this class.

Scheme – La proprietà Scheme restituisce lo schema URI per il protocollo di trasporto rappresentato dall'elemento di associazione.Scheme – The Scheme get property returns the URI scheme for the transport protocol represented by the binding element. Ad esempio, il System.ServiceModel.Channels.HttpTransportBindingElement e System.ServiceModel.Channels.TcpTransportBindingElement restituiscono "http" e "net.tcp" dalle rispettive Scheme proprietà.For example, the System.ServiceModel.Channels.HttpTransportBindingElement and the System.ServiceModel.Channels.TcpTransportBindingElement return "http" and "net.tcp" from their respective Scheme properties.

Elementi di associazione di codificaEncoding Binding Elements

Per creare un nuovo elemento di associazione di codifica, iniziare estendendo la classe BindingElement e implementando la classe System.ServiceModel.Channels.MessageEncodingBindingElement.To create new Encoding Binding Elements, start by extending the BindingElement class and implementing the System.ServiceModel.Channels.MessageEncodingBindingElement class. È necessario quindi implementare almeno i metodi Clone e MessageEncodingBindingElement.CreateMessageEncoderFactory e la proprietà MessageEncodingBindingElement.MessageVersion.At a minimum, you must then implement the Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory methods and the MessageEncodingBindingElement.MessageVersion property.

Per un elenco completo dei metodi e delle proprietà facoltative per gli elementi di associazione di codifica definiti dall'utente, vedere MessageEncodingBindingElement.For a complete listing of optional methods and properties for user-defined encoding binding elements, see MessageEncodingBindingElement.

Per ulteriori informazioni sulla creazione di un nuovo elemento di associazione, vedere Creating User-Defined associazioni.For more information on creating a new binding element, see Creating User-Defined Bindings.

Dopo aver creato un elemento di associazione per il canale, ripristinare il sviluppo canali argomento per vedere se si desidera aggiungere il supporto di file di configurazione per l'elemento di associazione, se e come aggiungere il supporto di pubblicazione dei metadati, e Se e come creare un'associazione definita dall'utente che utilizza l'elemento di associazione.Once you have created a binding element for your channel, return to the Developing Channels topic to see whether you want to add configuration file support to your binding element, if and how to add metadata publication support, and whether and how to construct a user-defined binding that uses your binding element.

Vedere ancheSee Also

BindingElement
Sviluppo di canaliDeveloping Channels
Trasporto UDPTransport: UDP