Erstellen eines BindingElementCreating a BindingElement

Bindungen und Bindungselemente (Objekte, die System.ServiceModel.Channels.Binding bzw. System.ServiceModel.Channels.BindingElement erweitern) sind die Orte, an denen das Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Anwendungsmodell mit Kanalfactorys und Kanallistenern verknüpft wird.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)Windows Communication Foundation (WCF) application model is associated with channel factories and channel listeners. Ohne Bindungen mithilfe von benutzerdefinierten Kanälen erfordert Programmierung auf Kanalebene wie beschrieben in Programmierung auf Kanalebene Dienst und Programmierung auf Kanalebene Client.Without bindings, using custom channels requires programming at the channel level as described in Service Channel-Level Programming and Client Channel-Level Programming. In diesem Thema wird erläutert, die Mindestanforderung zu aktivieren, verwenden den Kanal in WCFWCF, die Entwicklung einer BindingElement für Ihr Kanal, und aktivieren, verwenden Sie aus der Anwendung, wie in Schritt 4 des beschrieben Entwickeln von Kanälen.This topic discusses the minimum requirement to enable using your channel in WCFWCF, the development of a BindingElement for your channel, and enable use from the application as described in step 4 of Developing Channels.

ÜbersichtOverview

Durch Erstellen von BindingElement für Ihren Kanal können Entwickler ihn in einer WCFWCF-Anwendung nutzen.Creating a BindingElement for your channel enables developers to use it in an WCFWCF application. BindingElement-Objekte können aus der System.ServiceModel.ServiceHost-Klasse verwendet werden, um eine WCFWCF-Anwendung mit Ihrem Kanal zu verbinden, ohne dem genauen Informationstyp Ihres Kanals entsprechen zu müssen.BindingElement objects can be used from the System.ServiceModel.ServiceHost class to connect an WCFWCF application to your channel without having to the precise type information of your channel.

Einmal eine BindingElement wurde erstellt, Sie können weitere Funktionen, die abhängig von Ihren Anforderungen durch die verbleibenden Kanal Entwicklungsschritte beschrieben, die folgende Entwickeln von Kanälen.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.

Hinzufügen eines BindungselementsAdding a Binding Element

Um ein benutzerdefiniertes BindingElement zu implementieren, schreiben Sie eine Klasse, die von BindingElement erbt.To implement a custom BindingElement, write a class that inherits from BindingElement. Wenn Sie beispielsweise einen ChunkingChannel entwickelt haben, der große Nachrichten segmentieren und sie am anderen Ende wieder zusammensetzen kann, können Sie diesen Kanal in jeder Bindung verwenden, indem Sie ein BindingElement implementieren und die Bindung für die entsprechende Verwendung konfigurieren.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. In diesem Thema wird der ChunkingChannel als Beispiel zur Demonstration der Implementierungsanforderungen eines Bindungselements verwendet.The remainder of this topic uses the ChunkingChannel as an example to demonstrate the requirements of implementing a binding element.

Ein ChunkingBindingElement ist für das Erstellen der ChunkingChannelFactory und des ChunkingChannelListener verantwortlich.A ChunkingBindingElement is responsible for creating the ChunkingChannelFactory and ChunkingChannelListener. Es überschreibt die CanBuildChannelFactory-Implementierung und die CanBuildChannelListener-Implementierung und überprüft, ob der Typparameter IDuplexSessionChannel lautet (in unserem Beispiel ist dies die einzige Kanalform, die von ChunkingChannel unterstützt wird) und ob die anderen Bindungselemente der Bindung diese Kanalform unterstützen.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.

BuildChannelFactory überprüft zunächst, ob die angeforderte Kanalform erstellt werden kann, und ruft anschließend eine Liste der zu segmentierenden Nachrichtenaktionen auf.BuildChannelFactory first checks that the requested channel shape can be built and then gets a list of message actions to be chunked. Es erstellt dann eine neue ChunkingChannelFactory und übergibt diese an die innere Kanalfactory.It then creates a new ChunkingChannelFactory, passing it the inner channel factory. (Wenn Sie ein Transportbindungselement erstellen, ist dieses Element das letzte im Bindungsstapel und muss daher einen Kanallistener oder eine Kanalfactory erstellen.)(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.)

BuildChannelListener hat zum Erstellen von ChunkingChannelListener und zur Übergabe an den inneren Kanallistener eine ähnliche Implementierung.BuildChannelListener has a similar implementation for creating ChunkingChannelListener and passing it the inner channel listener.

Ein weiteres Beispiel: einen Transportkanal mithilfe der Transport: UDP Beispiel bietet die folgenden Außerkraftsetzung.As another example using a transport channel, the Transport: UDP sample provides the following override.

Im Beispiel ist das Bindungselement UdpTransportBindingElement, das von TransportBindingElement abgeleitet wird.In the sample, the binding element is UdpTransportBindingElement, which derives from TransportBindingElement. Es überschreibt die folgenden Methoden zum Erstellen der dem Kanal zugeordneten Factorys.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);  
}  

Es enthält auch Member zum Klonen des BindingElement und Zurückgeben unseres Schemas (soap.udp).It also contains members for cloning the BindingElement and returning our scheme (soap.udp).

ProtokollbindungselementeProtocol Binding Elements

Neue Bindungselemente können einbezogene Bindungselemente ersetzen oder erweitern sowie neue Transporte, Codierungen oder Protokolle auf höherer Ebene hinzufügen.New binding elements can replace or augment any of the included binding elements, adding new transports, encodings, or higher-level protocols. Um ein neues Protokollbindungselement zu erstellen, erweitern Sie zunächst die BindingElement-Klasse.To create a new Protocol Binding Element, start by extending the BindingElement class. Sie müssen dann implementieren, mindestens die BindingElement.Clone und Implementieren der ChannelProtectionRequirements mit IChannel.GetProperty.At a minimum, you must then implement the BindingElement.Clone and implement the ChannelProtectionRequirements using IChannel.GetProperty. Dadurch werden die ChannelProtectionRequirements für dieses Bindungselement zurückgegeben.This returns the ChannelProtectionRequirements for this binding element. Weitere Informationen finden Sie unter ChannelProtectionRequirements.For more information, see ChannelProtectionRequirements.

Clone sollte eine neue Kopie dieses Bindungselements zurückgeben.Clone should return a fresh copy of this binding element. Es wird empfohlen, dass Autoren von Bindungselementen Clone implementieren, indem sie einen Kopierkonstruktor verwenden, der den Basisklassen-Kopierkonstruktor aufruft, und anschließend zusätzliche Felder in dieser Klasse klonen.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.

TransportbindungselementeTransport Binding Elements

Um ein neues Transportbindungselement zu erstellen, erweitern Sie die TransportBindingElement-Schnittstelle.To create a new Transport Binding Element, extend the TransportBindingElement interface. Anschließend müssen Sie mindestens die Clone-Methode und die TransportBindingElement.Scheme-Eigenschaft implementieren.At a minimum, you must then implement the Clone method and the TransportBindingElement.Scheme property.

Clone – Sollte eine neue Kopie dieses Bindungselements zurückgeben.Clone – Should return a fresh copy of this Binding Element. Es wird empfohlen, dass Autoren von Bindungselementen einen Klon implementieren, indem sie einen Kopierkonstruktor verwenden, der den Basisklassen-Kopierkonstruktor aufruft, und anschließend zusätzliche Felder in dieser Klasse klonen.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 – Die Scheme get-Eigenschaft gibt das URI-Schema für das Transportprotokoll zurück, das vom Bindungselement dargestellt wird.Scheme – The Scheme get property returns the URI scheme for the transport protocol represented by the binding element. Z. B. die System.ServiceModel.Channels.HttpTransportBindingElement und System.ServiceModel.Channels.TcpTransportBindingElement Zurückgeben von "http" und "net.tcp" von ihren jeweiligen Scheme Eigenschaften.For example, the System.ServiceModel.Channels.HttpTransportBindingElement and the System.ServiceModel.Channels.TcpTransportBindingElement return "http" and "net.tcp" from their respective Scheme properties.

CodierungsbindungselementeEncoding Binding Elements

Um neue Codierungsbindungselemente zu erstellen, erweitern Sie zunächst die BindingElement-Klasse und implementieren die System.ServiceModel.Channels.MessageEncodingBindingElement-Klasse.To create new Encoding Binding Elements, start by extending the BindingElement class and implementing the System.ServiceModel.Channels.MessageEncodingBindingElement class. Anschließend müssen Sie mindestens die Clone-Methode, die MessageEncodingBindingElement.CreateMessageEncoderFactory-Methode und die MessageEncodingBindingElement.MessageVersion-Eigenschaft implementieren.At a minimum, you must then implement the Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory methods and the MessageEncodingBindingElement.MessageVersion property.

Eine vollständige Liste optionaler Methoden und Eigenschaften zu benutzerdefinierten Codierungsbindungselementen finden Sie unter MessageEncodingBindingElement.For a complete listing of optional methods and properties for user-defined encoding binding elements, see MessageEncodingBindingElement.

Weitere Informationen zum Erstellen eines neuen Bindungselements finden Sie unter Erstellen benutzerdefinierter Bindungen.For more information on creating a new binding element, see Creating User-Defined Bindings.

Nachdem Sie ein Bindungselement für den Kanal erstellt haben, zurück zu den Entwickeln von Kanälen Thema, um anzuzeigen, ob Sie Ihr Bindungselement konfigurationsdateiunterstützung hinzuzufügende Wenn und zum Hinzufügen von metadatenunterstützung für Veröffentlichung, und ob und wie die zur Erstellung einer benutzerdefinierten Bindung, die Ihr Bindungselement verwendet.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.

Siehe auchSee Also

BindingElement
Entwickeln von KanälenDeveloping Channels
Transport: UDPTransport: UDP