Freigeben über


Übersicht über zuverlässige Sitzungen

Die zuverlässige SOAP-Nachrichtenübermittlung der Windows Communication Foundation (WCF) bietet End-to-End-Zuverlässigkeit der Nachrichtenübertragung zwischen SOAP-Endpunkten. Dies geschieht in Netzwerken, die nicht zuverlässig sind, indem Transportfehler und SOAP-Fehler auf Nachrichtenebene überwunden werden. Insbesondere wird sitzungsbasierte, einzelne und (optional) geordnete Zustellung für Nachrichten bereitgestellt, die über SOAP- oder Transportvermittler übertragen werden. Die sitzungsbasierte Übermittlung ermöglicht das Gruppieren von Nachrichten in einer Sitzung mit optionaler Reihenfolge der Nachrichten.

In diesem Thema werden zuverlässige Sitzungen beschrieben, wann und wie man sie verwendet und wie man sie sichert.

Zuverlässige WCF-Sitzungen

In WCF sind zuverlässige Sitzungen eine Implementierung von zuverlässigem SOAP-Messaging, wie im WS-ReliableMessaging-Protokoll definiert.

WCF SOAP-zuverlässiges Messaging stellt eine zuverlässige End-to-End-Sitzung zwischen zwei Endpunkten bereit, unabhängig von der Anzahl oder Art von Zwischenvermittlern, die die Messaging-Endpunkte trennen. Dies schließt alle Transportintermediäre ein, die KEINE SOAP (z. B. HTTP-Proxys) oder Zwischenvermittler verwenden, die SOAP (z. B. SOAP-basierte Router oder Brücken) verwenden, die für Nachrichten erforderlich sind, die zwischen den Endpunkten fließen müssen. Ein zuverlässiger Sitzungskanal unterstützt die interaktive Kommunikation, sodass die von einem solchen Kanal verbundenen Dienste gleichzeitig ausgeführt werden und Nachrichten unter Bedingungen geringer Latenz, d. h. innerhalb relativ kurzer Zeitintervalle, ausgetauscht und verarbeitet werden. Diese Kopplung bedeutet, dass diese Komponenten gemeinsam Fortschritte machen oder zusammen fehlschlagen, sodass keine Isolation zwischen ihnen bereitgestellt wird.

Eine zuverlässige Sitzung maskiert zwei Arten von Fehlern:

  • SOAP-Fehler auf Nachrichtenebene, die verlorene oder duplizierte Nachrichten und Nachrichten enthalten, die in einer anderen Reihenfolge eingehen als in der Reihenfolge, in der sie gesendet wurden.

  • Transportfehler.

Eine zuverlässige Sitzung implementiert das WS-ReliableMessaging-Protokoll und ein Speicherübertragungsfenster, um SOAP-Fehler auf Nachrichtenebene zu maskieren und Verbindungen bei Transportfehlern erneut herzustellen.

Eine zuverlässige Sitzung bietet für SOAP-Nachrichten dasselbe, was TCP für IP-Pakete bereitstellt. Eine TCP-Socketverbindung stellt eine singulare Übertragung von IP-Paketen zwischen Knoten in der Reihenfolge bereit. Der zuverlässige Kanal bietet die gleiche Art von zuverlässiger Übertragung, unterscheidet sich jedoch von der ZUVERLÄSSIGKEIT des TCP-Sockets auf folgende Weise:

  • Die Zuverlässigkeit befindet sich auf SOAP-Nachrichtenebene, nicht für ein beliebig großes Bytepaket.

  • Die Zuverlässigkeit ist transportneutral, nicht nur für die Übertragung über TCP.

  • Die Zuverlässigkeit ist nicht an eine bestimmte Transportsitzung gebunden (z. B. die Sitzung, die eine TCP-Verbindung bereitstellt) und kann mehrere Transportsitzungen gleichzeitig oder sequenziell über die Lebensdauer der zuverlässigen Sitzung verwenden.

  • Die zuverlässige Sitzung liegt zwischen absender- und Empfänger-SOAP-Endpunkten, unabhängig von der Anzahl der Transportverbindungen, die für die Verbindung zwischen ihnen erforderlich sind. Kurz gesagt endet die TCP-Zuverlässigkeit, wo die Transportverbindung endet, während eine zuverlässige Sitzung End-to-End-Zuverlässigkeit bietet.

Zuverlässige Sitzungen und Bindungen

Wie bereits erwähnt, ist eine zuverlässige Sitzung transportneutral. Darüber hinaus können Sie eine zuverlässige Sitzung über viele Nachrichtenaustauschmuster einrichten, z. B. Anforderungsantwort oder Duplex. Eine verlässliche WCF-Sitzung wird als Eigenschaft einer Gruppe von Bindungen dargestellt.

Verwenden Sie eine zuverlässige Sitzung auf Endpunkten, die Folgendes verwenden:

  • HTTP-basierte Transportstandardbindungen:

    • WsHttpBinding und verfügbar gemachte Anforderung-Antwort- oder unidirektionale Verträge.

    • Wenn Sie eine zuverlässige Sitzung über einen Anfrage-Antwort- oder einen einfachen einseitigen Dienstvertrag verwenden.

    • WsDualHttpBinding und verfügbar gemachte Duplex-, Anforderung-Antwort- oder unidirektionale Verträge.

    • WsFederationHttpBinding und verfügbar gemachte Anforderung-Antwort- oder unidirektionale Verträge.

  • TCP-basierte Transportstandardbindungen:

    • NetTcpBinding und verfügbar gemachte Duplex-, Anforderung-Antwort- oder unidirektionale Verträge.

Verwenden Sie eine zuverlässige Sitzung für alle anderen Bindungen, indem Sie eine benutzerdefinierte Bindung erstellen, z. B. HTTPS (weitere Informationen zu Problemen, siehe zuverlässige Sitzungen und Sicherheit) oder eine benannte Pipebindung.

Sie können eine zuverlässige Sitzung auf verschiedene zugrundeliegende Kanaltypen stapeln, wodurch sich die Kanalform der zuverlässigen Sitzung ändert. Sowohl auf dem Client als auch auf dem Server hängt der Unterstützte Typ des zuverlässigen Sitzungskanals vom Typ des verwendeten zugrunde liegenden Kanals ab. In der folgenden Tabelle sind die Typen von Sitzungskanälen aufgeführt, die auf dem Client als Funktion des zugrunde liegenden Kanaltyps unterstützt werden.

Unterstützte zuverlässige Sitzungskanaltypen† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel Ja Ja Ja Ja
IRequestSessionChannel Ja Ja Nein Nein
IDuplexSessionChannel Nein Nein Ja Ja

†Die unterstützten Kanaltypen sind die Werte für den generischen TChannel Parameterwert, der an die BuildChannelFactory<TChannel>(BindingContext) Methode übergeben wird.

In der folgenden Tabelle sind die Typen von Sitzungskanälen aufgeführt, die auf dem Server als Funktion des zugrunde liegenden Kanaltyps unterstützt werden.

Unterstützte zuverlässige Sitzungskanaltypen– IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel Ja Ja Ja Ja
IReplySessionChannel Ja Ja Nein Nein
IDuplexSessionChannel Nein Nein Ja Ja

Die unterstützten Kanaltypen sind die Werte, die für den generischen TChannel Parameterwert verfügbar sind, der an die BuildChannelListener<TChannel>(BindingContext) Methode übergeben wird.

Zuverlässige Sitzungen und Sicherheit

Die Sicherung einer zuverlässigen Sitzung ist wichtig, um sicherzustellen, dass die kommunizierenden Parteien (Dienst und Client) authentifiziert werden und dass die in der Sitzung ausgetauschten Nachrichten nicht manipuliert werden. Darüber hinaus ist es wichtig, die Integrität jeder einzelnen zuverlässigen Sitzung sicherzustellen. Eine zuverlässige Sitzung wird durch Binden an einen Sicherheitskontext gesichert, der von einem Sicherheitssitzungskanal dargestellt und verwaltet wird. Der Sicherheitskanal stellt eine Sicherheitssitzung bereit. 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.

Wenn eine zuverlässige Sitzung über TCP-S erfolgt, ist die TCP-Sitzung an die zuverlässige Sitzung gebunden. Die Transportsicherheit gewährleistet daher, dass die Sicherheit auch an die zuverlässige Sitzung gebunden ist. In diesem Fall ist die Wiederherstellung der Verbindung deaktiviert.

Die einzige Ausnahme ist die Verwendung von HTTPS. Die SSL-Sitzung (Secure Sockets Layer) ist nicht an die zuverlässige Sitzung gebunden. Dadurch wird eine Bedrohung auferlegt, da Sitzungen, die einen Sicherheitskontext (die SSL-Sitzung) teilen, nicht voneinander geschützt sind; dies kann je nach Anwendung eine echte Bedrohung sein oder nicht.

Verwenden von zuverlässigen Sitzungen

Um zuverlässige WCF-Sitzungen zu verwenden, erstellen Sie einen Endpunkt mit einer Bindung, die eine zuverlässige Sitzung unterstützt. Verwenden Sie eine der vom System bereitgestellten Bindungen, die WCF mit aktivierter zuverlässiger Sitzung bereitstellt, oder erstellen Sie eine eigene benutzerdefinierte Bindung, die dies tut.

Die vom System definierten Bindungen, die eine zuverlässige Sitzung unterstützen und standardmäßig aktivieren, umfassen:

Die systemdefinierten Bindungen, die optional eine zuverlässige Sitzung unterstützen, sie jedoch nicht standardmäßig aktivieren, sind:

Ein Beispiel zum Erstellen einer benutzerdefinierten Bindung finden Sie unter How to: Create a Custom Reliable Session Binding with HTTPS.

Eine Erläuterung zu WCF-Bindungen, die zuverlässige Sitzungen unterstützen, finden Sie unter System-Provided Bindungen.

Wann man zuverlässige Sitzungen verwenden sollte

Es ist wichtig zu verstehen, wann zuverlässige Sitzungen in Ihrer Anwendung verwendet werden. WCF unterstützt zuverlässige Sitzungen zwischen Endpunkten, die gleichzeitig aktiv und lebendig sind. Wenn Ihre Anwendung einen der Endpunkte für eine Dauer nicht zur Verfügung stellt, verwenden Sie Warteschlangen, um Zuverlässigkeit zu erzielen.

Wenn für das Szenario zwei über TCP verbundene Endpunkte erforderlich sind, reicht TCP möglicherweise aus, um zuverlässige Nachrichtenaustausche bereitzustellen. Es ist allerdings nicht notwendig, eine zuverlässige Sitzung zu verwenden, da TCP sicherstellt, dass die Pakete in der richtigen Reihenfolge und nur einmal ankommen.

Wenn Ihr Szenario eines der folgenden Merkmale aufweist, müssen Sie eine zuverlässige Sitzung ernsthaft in Betracht ziehen.

  • SOAP-Vermittler, z. B. SOAP-Router

  • Proxyintermediäre oder Transportbrücken

  • Zeitweilige Konnektivität

  • Sitzungen über HTTP

Siehe auch