Übersicht über zuverlässige SitzungenReliable Sessions Overview

Windows Communication Foundation (WCF) SOAP reliable messaging stellt End-to-End-Übertragung zwischen SOAP-Endpunkte bereit.Windows Communication Foundation (WCF) SOAP reliable messaging provides end-to-end message transfer reliability between SOAP endpoints. Dies erfolgt in nicht zuverlässigen Netzwerken, indem Transportfehler und SOAP-Fehler auf Nachrichtenebene behoben werden.It does this on networks that are unreliable by overcoming transport failures and SOAP message-level failures. Insbesondere wird sitzungsbasierte, einzelne und (optional) geordnete Zustellung für Nachrichten bereitgestellt, die über SOAP- oder Transportvermittler übertragen werden.In particular, it provides session-based, single, and (optionally) ordered delivery for messages sent across SOAP or transport intermediaries. Sitzungsbasierte Zustellung bietet zum Gruppieren von Nachrichten in einer Sitzung und ordnet die Nachrichten optional.Session-based delivery provides for grouping messages in a session with optional ordering of the messages.

Dieses Thema beschreibt zuverlässige Sitzungen, wie und wann Sie zu verwenden und diese sichern.This topic describes reliable sessions, how and when to use them, and how to secure them.

Zuverlässige WCF-SitzungenWCF reliable sessions

Zuverlässige WCF-Sitzungen wird eine Implementierung von zuverlässigem SOAP-messaging gemäß der WS-ReliableMessaging-Protokolls.WCF reliable sessions is an implementation of SOAP reliable messaging as defined by the WS-ReliableMessaging protocol.

WCF-SOAP reliable messaging bietet eine zuverlässige End-to-End-Sitzung zwischen zwei Endpunkten, unabhängig von der Anzahl und Typ der Vermittler verwendet, die die messagingendpunkte getrennt.WCF SOAP reliable messaging provides an end-to-end reliable session between two endpoints, regardless of the number or type of intermediaries that separate the messaging endpoints. Dies umfasst alle transportvermittler, die SOAP (z. B. HTTP-Proxys) verwenden, oder Vermittler, die SOAP (z. B. SOAP-basierte Router oder Brücken) verwenden, die Nachrichten zwischen den Endpunkten erforderlich sind.This includes any transport intermediaries that don't use SOAP (for example, HTTP proxies) or intermediaries that use SOAP (for example, SOAP-based routers or bridges) that are required for messages to flow between the endpoints. Ein zuverlässiger Sitzungskanal unterstützt interaktive Kommunikation, damit die über einen solchen Kanal verbundenen Dienste gleichzeitig ausgeführt werden und austauschen und Verarbeiten von Nachrichten in Situationen mit geringer Latenz, also in relativ geringen Zeitintervalle.A reliable session channel supports interactive communication so that the services connected by such a channel run concurrently and exchange and process messages under conditions of low latency, that is, within relatively short intervals of time. Diese Kopplung bedeutet, dass diese Komponenten zusammen weiterarbeiten oder zusammen fehlschlagen; es gibt also keine voneinander isoliert.This coupling means that these components make progress together or fail together, so there's no isolation provided between them.

Eine zuverlässige Sitzung maskiert zwei Arten von Fehlern:A reliable session masks two kinds of failures:

  • SOAP-Fehler auf Nachrichtenebene, zu denen verloren gegangene oder doppelte Nachrichten gehören sowie Nachrichten, die in einer anderen Reihenfolge eintreffen als der, in der sie gesendet wurden.SOAP message-level failures, which includes lost or duplicated messages and messages that arrive in a different order from the order in which they were sent.

  • Transportfehler.Transport failures.

Eine zuverlässige Sitzung implementiert das WS-ReliableMessaging-Protokoll und ein Übertragungsfenster im Arbeitsspeicher, um SOAP-Fehler auf Nachrichtenebene zu maskieren und Verbindungen im Falle von Transportfehlern neu herzustellen.A reliable session implements the WS-ReliableMessaging protocol and an in-memory transfer window to mask SOAP message-level failures and re-establishes connections in the case of transport failures.

Eine zuverlässige Sitzung stellt für SOAP-Nachrichten das bereit, was TCP für IP-Pakete bereitstellt.A reliable session provides for SOAP messages what TCP provides for IP packets. Eine TCP-Socketverbindung stellt eine einzelne, geordnete Übertragung von IP-Paketen zwischen Knoten bereit.A TCP socket connection provides a singular, in-order transfer of IP packets between nodes. Der zuverlässige Kanal stellt denselben Typ zuverlässiger Übertragung bereit, die sich aber von der TCP-Socket-Zuverlässigkeit in folgenden Punkten unterscheidet:The reliable channel provides the same type of reliable transfer, but it differs from TCP socket reliability in the following ways:

  • Die Zuverlässigkeit gilt für die SOAP-Nachrichten-Ebene, nicht für ein Byte-Paket zufälliger Größe.The reliability is at the SOAP message level, not for an arbitrarily sized packet of bytes.

  • Die Zuverlässigkeit ist transportneutral, nicht nur für die Übertragung über TCP.The reliability is transport-neutral, not just for transfer over TCP.

  • Die Zuverlässigkeit ist nicht an eine bestimmte transportsitzung (z. B. die Sitzung, die eine TCP-Verbindung bereitstellt) gebunden und kann mehrere transportsitzungen gleichzeitig oder nacheinander während der gesamten Lebensdauer einer zuverlässigen Sitzung.The reliability isn't tied to a particular transport session (for example, the session a TCP connection provides) and can use multiple transport sessions concurrently or sequentially over the lifetime of the reliable session.

  • Die zuverlässige Sitzung besteht zwischen den sendenden und den empfangenden SOAP-Endpunkten, unabhängig von der Anzahl der Transportverbindungen, die für die Konnektivität zwischen ihnen erforderlich ist.The reliable session is between the sender and receiver SOAP endpoints, regardless of the number of transport connections required for connectivity between them. Kurz gesagt, endet TCP-Zuverlässigkeit, wo die transportverbindung endet, während eine zuverlässige Sitzung End-to-End-Zuverlässigkeit bereitstellt, wird.In short, TCP reliability ends where the transport connection ends, while a reliable session provides end-to-end reliability.

Zuverlässige Sitzungen und BindungenReliable sessions and bindings

Wie bereits erwähnt, ist eine zuverlässige Sitzung transportneutral.As mentioned earlier, a reliable session is transport neutral. Darüber hinaus können Sie eine zuverlässige Sitzung über viele Nachrichtenaustauschmuster, z. B. Anforderung-Antwort oder Duplex herstellen.Also, you can establish a reliable session over many message exchange patterns, such as request-reply or duplex. Eine zuverlässige WCF-Sitzung wird als eine Eigenschaft eines Satzes von Bindungen verfügbar gemacht.A WCF reliable session is exposed as a property of a set of bindings.

Verwenden Sie eine zuverlässige Sitzung auf Endpunkten, verwenden:Use a reliable session on endpoints that use:

  • HTTP-basierte Transport-Standardbindungen:HTTP-based transport standard bindings:

    • WsHttpBinding und verfügbar gemachte Anforderung-Antwort- oder unidirektionale Verträge.WsHttpBinding and expose request-reply or one-way contracts.

    • Wenn die zuverlässige Sitzung über einen Anforderung / Antwort- oder einen einfachen unidirektionalen Dienstvertrag verwendet.When using reliable session over a request-reply or simple one-way service contract.

    • WsDualHttpBinding und verfügbar gemachte Duplex-, Anforderung-Antwort- oder unidirektionale Verträge.WsDualHttpBinding and expose duplex, request-reply, or one-way contracts.

    • WsFederationHttpBinding und verfügbar gemachte Anforderung-Antwort- oder unidirektionale Verträge.WsFederationHttpBinding and expose request-reply or one-way contracts.

  • TCP-basierte Transport-Standardbindungen:TCP-based transport standard bindings:

    • NetTcpBinding und verfügbar gemachte Duplex-, Anforderung-Antwort- oder unidirektionale Verträge.NetTcpBinding and expose duplex, request reply, or one-way contracts.

Eine zuverlässige Sitzung für jede andere Bindung verwenden, erstellen Sie eine benutzerdefinierte Bindung, etwa HTTPS (Weitere Informationen zu Problemen finden Sie unter zuverlässige Sitzungen und Sicherheit) oder eine benannte Pipe-Bindung.Use a reliable session on any other bindings by creating a custom binding, such as HTTPS (for more information about issues, see Reliable sessions and security) or a named pipe binding.

Sie können eine zuverlässige Sitzung auf verschiedene zugrunde liegende Kanaltypen gestapelt, und die resultierende kanalform für zuverlässige Sitzung variiert.You can stack a reliable session on different underlying channel types, and the resulting reliable session channel shape varies. Auf dem Client und dem Server hängt den Typ des zugrunde liegenden Kanäle zur Datenübergabe der Typ des zuverlässigen Sitzungskanal unterstützt.On both the client and the server, the type of reliable session channel supported depends on the type of underlying channel used. In der folgenden Tabelle werden die Typen von Sitzungskanälen aufgeführt, die vom Client auf der Basis des zugrunde liegenden Kanaltyps unterstützt werden.The following table lists the types of session channels supported on the client as a function of the underlying channel type.

Unterstützte zuverlässige sitzungskanaltypen†Supported reliable session channel types† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel JaYes JaYes JaYes JaYes
IRequestSessionChannel JaYes JaYes NeinNo NeinNo
IDuplexSessionChannel NeinNo NeinNo JaYes JaYes

†Die unterstützen Kanaltypen sind die Werte für die generische TChannel Parameterwert, der übergeben wird die BuildChannelFactory<TChannel>(BindingContext) Methode.†The supported channel types are the values available for the generic TChannel parameter value that is passed into the BuildChannelFactory<TChannel>(BindingContext) method.

In der folgenden Tabelle werden die Typen von Sitzungskanälen aufgeführt, die vom Server auf der Basis des zugrunde liegenden Kanaltyps unterstützt werden.The following table lists the types of session channels supported on the server as a function of the underlying channel type.

Unterstützte zuverlässige sitzungskanaltypen‡Supported reliable session channel types‡ IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel JaYes JaYes JaYes JaYes
IReplySessionChannel JaYes JaYes NeinNo NeinNo
IDuplexSessionChannel NeinNo NeinNo JaYes JaYes

‡Die unterstützen Kanaltypen sind die Werte für die generische TChannel Parameterwert, der übergeben wird die BuildChannelListener<TChannel>(BindingContext) Methode.‡The supported channel types are the values available for the generic TChannel parameter value that is passed into the BuildChannelListener<TChannel>(BindingContext) method.

Zuverlässige Sitzungen und SicherheitReliable sessions and security

Schutz einer zuverlässigen Sitzung ist wichtig, stellen Sie sicher, dass die Kommunikationspartner (Dienst und Client) authentifiziert werden und die in der Sitzung ausgetauschten Nachrichten manipuliert werden nicht.Securing a reliable session is important to ensure that the communicating parties (service and client) are authenticated and that the messages exchanged in the session aren't tampered with. Darüber hinaus ist es wichtig, um die Integrität jeder einzelnen zuverlässigen Sitzung sicherzustellen.Furthermore, it's important to ensure the integrity of each individual reliable session. Eine zuverlässige Sitzung wird geschützt, indem es an einen Sicherheitskontext, die dargestellt und verwaltet vom Sicherheitskanal der Sitzung gebunden.A reliable session is secured by binding it to a security context that's represented and managed by a security session channel. Der Sicherheitskanal stellt eine Sicherheitssitzung bereit.The security channel provides a security session. Die Sicherheitstoken, die während der Einrichtung der Sitzung ausgetauscht werden, werden anschließend verwendet, um die Nachrichten in der zuverlässigen Sitzung zu schützen.Security tokens exchanged during the session establishment are then used to secure the messages in the reliable session.

Wenn eine zuverlässige Sitzung über TCP-S ist, ist die TCP-Sitzung an die zuverlässige Sitzung gebunden.When a reliable session is over TCP-S, the TCP session is tied to the reliable session. Aus diesem Grund wird transportsicherheit sichergestellt, dass Sicherheit auch an die zuverlässige Sitzung gebunden ist.Therefore, transport security ensures that security is also tied to the reliable session. In diesem Fall ist die erneute Einrichtung einer Verbindung abgeschaltet.In this case, connection re-establishment is turned off.

Die einzige Ausnahme besteht bei der Verwendung von HTTPS.The only exception is when using HTTPS. Die Secure Sockets Layer (SSL)-Sitzung ist nicht an die zuverlässige Sitzung gebunden.The Secure Sockets Layer (SSL) session isn't bound to the reliable session. Dies erzwingt eine Bedrohung darstellen, weil Sitzungen, die gemeinsam einen Sicherheitskontext (die SSL-Sitzung) voneinander geschützt sind; Dadurch möglicherweise oder ist möglicherweise nicht in der ein echtes Risiko darstellen, abhängig von der Anwendung.This imposes a threat because sessions that are sharing a security context (the SSL session) aren't protected from each other; this might or might not be a real threat depending on the application.

Verwenden von zuverlässigen SitzungenUsing reliable sessions

Um zuverlässige WCF-Sitzungen zu verwenden, erstellen Sie einen Endpunkt mit einer Bindung, die eine zuverlässige Sitzung unterstützt.To use WCF reliable sessions, create an endpoint with a binding that supports a reliable session. Verwenden Sie eine vom System bereitgestellten Bindungen, die WCF mit der zuverlässigen Sitzung bietet aktiviert, oder erstellen Sie eine eigene benutzerdefinierte Bindung, die dies tut.Use one of the system-provided bindings that WCF provides with the reliable session enabled or create your own custom binding that does this.

Die systemdefinierten Bindungen, die standardmäßig eine zuverlässige Sitzung unterstützen und aktivieren, sind:The system-defined bindings that support and enable a reliable session by default include:

Die vom System bereitgestellte Bindungen, die eine zuverlässige Sitzung als Option unterstützen, aber nicht standardmäßig aktivieren sind:The system-provided bindings that support a reliable session as an option but don't enable one by default include:

Ein Beispiel zum Erstellen einer benutzerdefinierten Bindung finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten zuverlässigen Sitzungsbindung mit HTTPS.For an example of how to create a custom binding, see How to: Create a Custom Reliable Session Binding with HTTPS.

Eine Erläuterung der WCF-Bindungen, die zuverlässige Sitzungen unterstützen, finden Sie unter sicherheitsbindungsarten Bindungen.For a discussion of WCF bindings that support reliable sessions, see System-Provided Bindings.

Wann zuverlässige Sitzungen verwendetWhen to use reliable sessions

Es ist wichtig zu verstehen, wann zuverlässige Sitzungen in Ihrer Anwendung verwenden.It's important to understand when to use reliable sessions in your application. WCF unterstützt zuverlässige Sitzungen zwischen Endpunkten, die gleichzeitig aktiv und gültig sind.WCF supports reliable sessions between endpoints that are active and alive at the same time. Wenn Ihre Anwendung einen der Endpunkte erfordert für einen bestimmten Zeitraum nicht verfügbar sein, und klicken Sie dann mithilfe von Warteschlangen an um Zuverlässigkeit zu erreichen.If your application requires one of the endpoints be unavailable for a duration of time, then use queues to achieve reliability.

Wenn das Szenario mit zwei Endpunkte über TCP verbunden erforderlich ist, kann TCP ausreichen, um den zuverlässigen Nachrichtenaustausch gewähren sein.If the scenario requires two endpoints connected over TCP, then TCP may be sufficient to provide reliable message exchanges. Zwar ist es nicht erforderlich, um eine zuverlässige Sitzung zu verwenden, da TCP wird, dass sichergestellt Eintreffen der Pakete in der Reihenfolge und nur einmal.Although, it isn't necessary to use a reliable session, since TCP ensures that the packets arrive in order and only once.

Verfügt Ihr Szenario die folgenden Merkmale, müssen Sie ernsthaft sollten Sie die Verwendung einer zuverlässigen Sitzungs.If your scenario has any of the following characteristics, then you must seriously consider using a reliable session.

  • SOAP-Vermittler, z. B. SOAP-RouterSOAP intermediaries, such as SOAP routers

  • Proxyvermittler oder transportbrückenProxy intermediaries or transport bridges

  • Periodische KonnektivitätIntermittent connectivity

  • Sitzungen über HTTPSessions over HTTP

Siehe auchSee also

Verwenden von Bindungen, um Dienste und Clients konfigurieren Using Bindings to Configure Services and Clients
Zuverlässige WS-SitzungWS Reliable Session