Dienst: Kanallistener und KanäleService: Channel Listeners and Channels

Es gibt drei Kategorien von Kanalobjekten: Kanäle, Kanallistener und Kanalfactorys.There are three categories of channel objects: channels, channel listeners and channel factories. Kanäle sind die Schnittstelle zwischen der Anwendung und dem Kanalstapel.Channels are the interface between the application and the channel stack. Kanallistener sind für die Erstellung von Kanälen auf der Empfänger- (oder Abhör-)Seite zuständig, normalerweise als Reaktion auf eine neue eingehende Nachricht oder Verbindung.Channel listeners are responsible for creating channels on the receive (or listen) side, typically in response to a new incoming message or connection. Kanalfactorys sind dafür zuständig, Kanäle auf der Senderseite zu erstellen, um eine Kommunikation mit einem Endpunkt zu initiieren.Channel factories are responsible for creating channels on the send side to initiate communication with an endpoint.

Kanallistener und KanäleChannel Listeners and Channels

Kanallistener sind für die Erstellung von Kanälen und den Empfang von Nachrichten von der unteren Ebene oder vom Netzwerk zuständig.Channel listeners are responsible for creating channels and receiving messages from the layer below or from the network. Empfangene Nachrichten werden der oberen Ebene mithilfe eines Kanals, der durch den Kanallistener erstellt wird, zugestellt.Received messages are delivered to the layer above using a channel that is created by the channel listener.

Im folgenden Diagramm wird der Prozess des Empfangs von Nachrichten und ihrer Übermittlung an die obere Ebene veranschaulicht.The following diagram illustrates the process of receiving messages and delivering them to the layer above.

Kanallistener und KanäleChannel listeners and channels
Ein Kanallistener, der Nachrichten empfängt und sie der oberen Ebene über Kanäle zustellt.A channel listener receiving messages and delivering to the layer above through channels.

Der Prozess kann in jedem Kanal als Warteschlange konzipiert werden, obwohl die Implementierung möglicherweise keine Warteschlange verwendet.The process can be conceptually modeled as a queue inside each channel although the implementation may not actually use a queue. Der Kanallistener ist dafür zuständig, Nachrichten von der unteren Ebene oder vom Netzwerk zu empfangen und sie in die Warteschlange zu stellen.The channel listener is responsible for receiving messages from the layer below or the network and putting them in the queue. Der Kanal ist für das Abrufen von Nachrichten aus der Warteschlange und ihre Übergabe an die obere Ebene zuständig, wenn diese Ebene eine Nachricht anfordert, z. B. durch Aufrufen von Receive im Kanal.The channel is responsible for getting messages from the queue and handing them to the layer above when that layer asks for a message, for example by calling Receive on the channel.

WCF stellt basisklassenhilfen für diesen Prozess bereit.WCF provides base class helpers for this process. (Ein Diagramm der Kanal Hilfsklassen, die in diesem Thema erläutert, finden Sie unter Übersicht über das Kanalmodell.)(For a diagram of the channel helper classes discussed in this topic, see Channel Model Overview.)

Die folgende Diskussion basiert auf der Transport: UDP Beispiel.The following discussion is based upon the Transport: UDP sample.

Erstellen eines KanallistenersCreating a Channel Listener

Die "ableitet, UdpChannelListener, die das Beispiel implementiert die ChannelListenerBase Klasse.The`UdpChannelListener that the sample implements derives from the <xref:System.ServiceModel.Channels.ChannelListenerBase> class.</span></span> <span data-ttu-id="fb091-127">Er verwendet einen einzelnen UDP-Socket, um Datagramme zu empfangen.</span><span class="sxs-lookup"><span data-stu-id="fb091-127">It uses a single UDP socket to receive datagrams.</span></span> <span data-ttu-id="fb091-128">DieOnOpen-Methode empfängt Daten mit dem UDP-Socket in einer asynchronen Schleife.</span><span class="sxs-lookup"><span data-stu-id="fb091-128">TheOnOpen` method receives data using the UDP socket in an asynchronous loop. Die Daten werden dann mit dem Nachrichtencodierungssystem in Nachrichten konvertiert:The data are then converted into messages using the message encoding system:

message = UdpConstants.MessageEncoder.ReadMessage(  
  new ArraySegment<byte>(buffer, 0, count),   
  bufferManager  
);  

Da derselbe Datagrammkanal Nachrichten darstellt, die aus einer Reihe von Quellen eintreffen, ist der UdpChannelListener ein Singletonlistener.Because the same datagram channel represents messages that arrive from a number of sources, the UdpChannelListener is a singleton listener. Ist auf den meisten ein aktives IChannel'' diesem Listener zu einem Zeitpunkt zugeordnet.There is at most one active IChannel``associated with this listener at a time. In diesem Beispiel wird nur dann ein weiterer generiert, wenn ein Kanal, der mit der AcceptChannel-Methode zurückgegeben wird, anschließend freigegeben wird.The sample generates another one only if a channel that is returned by the AcceptChannel method is subsequently disposed. Wenn eine Nachricht empfangen wird, wird sie in diesem Singletonkanal in die Warteschlange eingereiht.When a message is received, it is enqueued into this singleton channel.

UdpInputChannelUdpInputChannel

Die UdpInputChannel -Klasse implementiert IInputChannel.The UdpInputChannel class implements IInputChannel. Sie besteht aus einer Warteschlange mit eingehenden Nachrichten, die vom UdpChannelListener-Socket gefüllt wird.It consists of a queue of incoming messages that is populated by the UdpChannelListener's socket. Diese Nachrichten werden mit der Receive-Methode aus der Warteschlange entfernt.These messages are dequeued by the Receive method.