Übersicht über das KanalmodellChannel Model Overview

Der Kanalstapel für Windows Communication Foundation (WCF) ist ein Überlagerter Kommunikationsstapel mit einem oder mehreren Kanälen, die Nachrichten verarbeiten.The Windows Communication Foundation (WCF) channel stack is a layered communication stack with one or more channels that process messages. Am unteren Ende des Stapels befindet sich ein Transportkanal, der für die Anpassung des Kanalstapels an den zugrunde liegenden Transport (z. B. TCP, HTTP, SMTP und andere Transportarten) zuständig ist.At the bottom of the stack is a transport channel that is responsible for adapting the channel stack to the underlying transport (for example, TCP, HTTP, SMTP and other types of transport.). Kanäle stellen ein Programmiermodell auf niedriger Ebene zum Senden und Empfangen von Nachrichten bereit.Channels provide a low-level programming model for sending and receiving messages. Dieses Programmiermodell nutzt mehrere Schnittstellen und andere Typen, die zusammen als WCF-Kanal-Modells bezeichnet.This programming model relies on several interfaces and other types collectively known as the WCF channel model. In diesem Thema werden Kanalformen, die Konstruktion eines grundlegenden Kanallisteners (dienstseitig) und einer Kanalfactory (clientseitig) behandelt.This topic discusses channel shapes, the construction of a basic channel listener (on the service) and channel factory (on the client).

KanalstapelChannel Stack

WCF-Endpunkten kommunizieren mit der Welt über einen Kommunikationsstapel genannten Kanalstapel.WCF endpoints communicate with the world using a communication stack called the channel stack. Das folgende Diagramm vergleicht den Kanalstapel mit anderen Kommunikationsstapeln, z. B. TCP/IP.The following diagram compares the channel stack with other communication stacks, for example TCP/IP.

Channel ModellChannel Model

Zunächst die Ähnlichkeiten: In beiden Fällen bietet jede Schicht des Stapels eine gewisse Abstraktion der Welt unterhalb der Schicht und stellt diese Abstraktion nur der direkt darüber liegenden Schicht zur Verfügung.First, the similarities: In both cases, each layer of the stack provides some abstraction of the world below that layer and exposed that abstraction only to the layer directly above it. Jede Schicht verwendet nur die Abstraktion der direkt darunter liegenden Schicht.Each layer uses the abstraction of only the layer directly below it. Außerdem kommuniziert bei der Kommunikation von zwei Schichten in beiden Fällen jede Schicht mit der entsprechenden Schicht des anderen Stapels, d. h. die IP-Schicht kommuniziert mit der IP-Schicht und die TCP-Schicht mit der TCP-Schicht usw.Also in both cases, when two stacks communicate, each layer communicates with the corresponding layer in the other stack, for example, the IP layer communicates with the IP layer and the TCP layer with the TCP layer, and so on.

Und nun die Unterschiede: Während der TCP-Stapel konzipiert wurde, um eine Abstraktion des physischen Netzwerks zur Verfügung zu stellen, soll der Kanalstapel nicht nur eine Abstraktion darüber verfügbar machen, wie die Nachricht zugestellt wird, d. h. über den Transport, sondern auch eine Abstraktion anderer Funktionen schaffen, z. B. was die Nachricht enthält oder welches Protokoll für die Kommunikation verwendet wird, einschließlich des Transports, jedoch weit darüber hinausgehend.Now, the differences: While the TCP stack was designed to provide an abstraction of the physical network, the channel stack is designed to provide an abstraction of not only how the message is delivered, that is, the transport, but also other features such as what is in the message or what protocol is used for communication, including the transport but much more than that. Ein zuverlässiges Sitzungsbindungselement ist Bestandteil des Kanalstapels, befindet sich jedoch nicht unterhalb der Transportschicht oder des Transports selbst.For example, reliable session binding element is part of the channel stack but is not below the transport or the transport itself. Diese Abstraktion wird dadurch erreicht, dass der untere Kanal im Stapel das zugrunde liegende Transportprotokoll an die Kanalstapelarchitektur anpassen muss und dann auf die Kanäle weiter oben im Stapel angewiesen ist, um Kommunikationsfunktionen wie Zuverlässigkeitsgarantien und Sicherheit bereitzustellen.This abstraction is achieved by requiring the bottom channel in the stack to adapt the underlying transport protocol to the channel stack architecture and then relying on channels further up in the stack to provide communication features such as reliability guarantees and security.

Nachrichten fließen als Message-Objekte durch den Kommunikationsstapel.Messages flow through the communication stack as Message objects. Wie in der Abbildung oben gezeigt, wird der unterste Kanal als Transportkanal bezeichnet.As shown in figure above, the bottom channel is called a transport channel. Dieser Kanal ist für das Senden und Empfangen von Nachrichten zu und von anderen Seiten zuständig.It is the channel that is responsible for sending and receiving messages to and from other parties. Dazu gehört die Zuständigkeit für das Transformieren des Message-Objekts in und aus dem Format, das zur Kommunikation mit anderen Seiten verwendet wird.This includes the responsibility of transforming the Message object to and from the format used to communicate with other parties. Oberhalb des Transportkanals kann eine beliebige Zahl von Protokollkanälen vorhanden sein, wobei jeder Kanal für die Bereitstellung einer Kommunikationsfunktion sowie für zuverlässige Zustellungsgarantien verantwortlich ist.Above the transport channel there can be any number of protocol channels each responsible for providing a communication function such as reliable delivery guarantees. Protokollkanäle sind für Nachrichten tätig, die in Form des Message-Objekts durch sie hindurchfließen.Protocol channels operate on messages flowing through them in the form of the Message object. Normalerweise transformieren sie entweder die Nachricht, z. B. durch Hinzufügen von Headern oder Verschlüsseln des Nachrichtentexts, oder sie senden oder empfangen eigene Protokollkontrollnachrichten, z. B. Empfangsbestätigungen.They typically either transform the message, for example, by adding headers or encrypting the body, or send and receive their own protocol control messages, for example, receipt acknowledgments.

KanalformenChannel Shapes

Jeder Kanal implementiert eine oder mehrere Schnittstellen, die als Kanalformschnittstellen oder Kanalformen bezeichnet werden.Each channel implements one or more interfaces known as channel shape interfaces or channel shapes. Diese Kanalformen stellen kommunikationsorientierte Methoden wie Senden und Empfangen oder Anfordern und Antworten zur Verfügung, die der Kanal implementiert und der Benutzer des Kanals aufruft.Those channel shapes provide the communication-oriented methods such as send and receive or request and reply that the channel implements and the user of the channel calls. An der Basis der kanalformen befindet sich die IChannel -Schnittstelle, die eine Schnittstelle, die bereitstellt, ist eine GetProperty <T > Methode, die als schichtmechanismus vorgesehen ist, den Zugriff auf willkürliche Funktionen, die von Kanälen im Stapel verfügbar gemacht werden.At the base of the channel shapes is the IChannel interface, which is an interface that provides a GetProperty<T> method intended as a layered mechanism to access arbitrary features exposed by channels in the stack. Die fünf Kanalformen, die IChannel erweitern, sind:The five channel shapes that extend IChannel are:

Darüber hinaus besitzt jede dieser Formen eine Entsprechung, die System.ServiceModel.Channels.ISessionChannel<TSession> erweitert, um Sitzungen zu unterstützen.Further, each of these shapes has an equivalent that extends System.ServiceModel.Channels.ISessionChannel<TSession> to support sessions. Diese lauten wie folgt:These are:

Die Kanalformen sind einigen der grundlegenden Nachrichtenaustauschmuster, die von vorhandenen Transportprotokollen unterstützt werden, nachempfunden.The channel shapes are patterned after some of the fundamental message exchange patterns supported by existing transport protocols. Unidirektionales messaging entspricht beispielsweise auf ein IInputChannel / IOutputChannel Paar, Anforderung-Antwort entspricht IRequestChannel / IReplyChannel -Paare und bidirektionale duplexkommunikationen entsprechen IDuplexChannel (beide ASP.NET-Timeout IInputChannel und IOutputChannel).For example, one-way messaging corresponds to an IInputChannel/IOutputChannel pair, request-reply corresponds to IRequestChannel/IReplyChannel pairs and two-way duplex communications corresponds to IDuplexChannel (which extends both IInputChannel and IOutputChannel).

Programmieren mit dem KanalstapelProgramming with the Channel Stack

Kanalstapel werden i. d. R. mit einem Factorymuster erstellt, in dem eine Bindung den Kanalstapel erstellt.Channel stacks are typically created using a factory pattern where a binding creates the channel stack. Auf der Senderseite wird eine Bindung zum Erstellen einer ChannelFactory verwendet, die wiederum einen Kanalstapel erstellt und einen Verweis auf den obersten Kanal im Stapel zurückgibt.On the send side, a binding is used to build a ChannelFactory, which in turn builds a channel stack and returns a reference to the top channel in the stack. Die Anwendung kann dann diesen Kanal verwenden, um Nachrichten zu senden.The application can then use this channel to send messages. Weitere Informationen finden Sie unter Programmierung auf Kanalebene Client.For more information, see Client Channel-Level Programming.

Auf der Empfängerseite wird eine Bindung verwendet, um einen IChannelListener zu erstellen, der eingehende Nachrichten abhört.On the receive side a binding is used to build a IChannelListener, which listens for incoming messages. Der IChannelListener stellt der abhörenden Anwendung Nachrichten zur Verfügung, indem ein Kanalstapel erstellt und der Anwendungsverweis an den oberen Kanal übergeben wird.The IChannelListener provides messages to the listening application by creating channel stacks and handing the application reference to the top channel. Die Anwendung verwendet diesen Kanal dann zum Empfangen eingehender Nachrichten.The application then uses this channel to receive incoming messages. Weitere Informationen finden Sie unter Programmierung auf Kanalebene Dienst.For more information, see Service Channel-Level Programming.

Das KanalobjektmodellThe Channel Object Model

Das Kanalobjektmodell stellt die Kerngruppe von Schnittstellen dar, die zur Implementierung von Kanälen, Kanallistenern und Kanalfactorys erforderlich sind.The channel object model is the core set of interfaces required to implement channels, channel listeners and channel factories. Zur Erleichterung benutzerdefinierter Implementierungen werden auch einige Basisklassen zur Verfügung gestellt.There are also some base classes provided to assist in custom implementations.

Kanallistener sind für die Abhörung eingehender Nachrichten und für die Zustellung dieser Nachrichten an die darüber liegende Schicht über Kanäle verantwortlich, die vom Kanallistener erstellt werden.Channel listeners are responsible for listening for incoming messages, then delivering them to the layer above through channels created by the channel listener.

Kanalfactorys sind für das Erstellen von Kanälen zuständig, die zum Senden von Nachrichten und zum Schließen aller Kanäle, die sie beim Schließen der Kanalfactory erstellt haben, verwendet werden.Channel factories are responsible for creating channels that are used for sending messages and for closing all channels they created when the channel factory is closed.

ICommunicationObject ist die Kernschnittstelle, die den grundlegenden Zustandsautomaten definiert, der alle Kommunikationsobjekte implementiert.ICommunicationObject is the core interface that defines the basic state machine that all communication objects implement. CommunicationObject stellt eine Implementierung dieser Kernschnittstelle bereit, die andere Kanalklassen ableiten können, statt die Schnittstelle neu zu implementieren.CommunicationObject provides an implementation of this core interface that other channel classes can derive from rather than re-implementing the interface. Aber dies ist nicht erforderlich: Ein benutzerdefinierter Kanal kann ICommunicationObject direkt implementieren und nicht von CommunicationObject erben.However, this is not required: a custom channel can implement ICommunicationObject directly and not inherit from CommunicationObject. Keine der Klassen in Abbildung 3 gilt als Teil des Kanalmodells. Sie sind Hilfen für Implementierer von benutzerdefinierten Kanälen, die Kanäle erstellen möchten.None of the classes in Figure 3 are considered part of the channel model; they are helpers available to custom channel implementers who want to build channels.

KanalmodellChannel model

In den folgenden Themen werden das Kanalobjektmodell sowie verschiedene Entwicklungsbereiche beschrieben, die die Erstellung benutzerdefinierter Kanäle unterstützen.The following topics describe the channel object model as well as various development areas that help build custom channels.

ThemaTopic BeschreibungDescription
Dienst: Kanallistener und KanäleService: Channel Listeners and Channels Beschreibt Kanallistener, die eingehende Kanäle in einer Dienstanwendung abhört.Describes channel listeners, which listen for incoming channels in a service application.
Client: Kanalfactorys und KanäleClient: Channel Factories and Channels Beschreibt Kanalfactorys, die Kanäle zur Herstellung einer Verbindung mit einer Dienstanwendung erstellen.Describes channel factories, which create channels to connect to a service application.
Grundlegendes zu ZustandsänderungenUnderstanding State Changes Beschreibt, wie die System.ServiceModel.ICommunicationObject-Schnittstelle Zustandsänderungen in Kanälen modelliert.Describes how the System.ServiceModel.ICommunicationObject interface models state changes in channels.
Auswählen eines MeldungsaustauschmustersChoosing a Message Exchange Pattern Beschreibt die sechs grundlegenden Nachrichtenaustauschmuster, die Kanäle unterstützen können.Describes the six basic message exchange patterns that channels can support.
Behandeln von Ausnahmen und FehlernHandling Exceptions and Faults Beschreibt, wie Fehler und Ausnahmen in benutzerdefinierten Kanälen behandelt werden.Describes how to handle faults and exceptions in custom channels.
Konfiguration und MetadatenunterstützungConfiguration and Metadata Support Beschreibt, wie die Verwendung von benutzerdefinierten Kanälen im Anwendungsmodell unterstützt wird und Metadaten mit Bindungen und Bindungselementen exportiert und importiert werden.Describes how to support the use of custom channels from the application model and how to export and import metadata using bindings and binding elements.