Teilen über


Synchrone Szenarien mit HTTP, TCP oder benannten Pipes

In diesem Thema werden die Aktivitäten und Übertragungen für verschiedene synchrone Anforderungs-/Antwortszenarien beschrieben. Dabei werden HTTP, TCP oder benannte Pipes mit einem Singlethreadclient verwendet. Weitere Informationen zu Multithreadanforderungen finden Sie unter Asynchrone Szenarien mit HTTP, TCP oder Named-Pipe.

Synchrone Anforderung/Antwort ohne Fehler

In diesem Abschnitt werden die Aktivitäten und Übertragungen für ein gültiges synchrones Anforderungs-/Antwortszenario mit Singlethreadclient beschrieben.

Client

Herstellen einer Verbindung mit Dienstendpunkt

Ein Client wird erstellt und geöffnet. Für jeden dieser Schritte wird die Umgebungsaktivität (A) jeweils auf eine "Konstruktclient"-Aktivität (B) und eine "Offene Client"-Aktivität (C) übertragen. Für jede Aktivität, auf die übertragen wird, wird die Umgebungsaktivität unterbrochen, bis eine Übertragung zurück erfolgt, d. h. bis ServiceModel-Code ausgeführt wird.

Stellen einer Anforderung an einen Dienstendpunkt

Die Umgebungsaktivität wird auf eine "ProcessAction"-Aktivität (D) übertragen. Innerhalb dieser Aktivität wird eine Anforderungsnachricht gesendet, und eine Antwortmeldung wird empfangen. Die Aktivität endet, wenn das Steuerelement zum Benutzercode zurückkehrt. Da dies eine asynchrone Anforderung ist, unterbricht die Umgebungsaktivität, bis das Steuerelement einen Wert zurückgibt.

Schließen einer Verbindung mit Dienstendpunkt

Die Aktivität "Schließen" (I) des Clients wird aus der Umgebungsaktivität erstellt. Dies ist identisch mit "neu" und "geöffnet".

Server

Einrichten eines Diensthosts

Die neuen und geöffneten Aktivitäten (N und O) des ServiceHost werden aus der Umgebungsaktivität (M) erstellt.

Eine Listeneraktivität (P) wird dadurch erstellt, dass ein ServiceHost für jeden Listener geöffnet wird. Die Listeneraktivität wartet darauf, Daten zu empfangen und zu verarbeiten.

Empfangen von Daten durch Übertragung

Wenn Daten durch Übertragung eintreffen, wird eine "ReceiveBytes"-Aktivität (Q) erstellt, wenn sie nicht bereits vorhanden ist, um die empfangenen Daten zu verarbeiten. Diese Aktivität kann für mehrere Nachrichten in einer Verbindung oder einer Warteschlange wiederverwendet werden.

Die ReceiveBytes-Aktivität startet eine ProcessMessage-Aktivität (R), wenn ausreichend Daten vorhanden sind, um eine SOAP-Aktionsnachricht zu erstellen.

Bei der Aktivität R werden die Nachrichtenheader verarbeitet, und der activityID-Header wird überprüft. Wenn dieser Header vorhanden ist, wird die Aktivitäts-ID als ProcessAction-Aktivität festgelegt; andernfalls wird eine neue ID erstellt.

Eine ProcessAction-Aktivität (S) wird erstellt, und es wird auf sie übertragen, wenn der Aufruf verarbeitet wird. Diese Aktivität endet, wenn alle Verarbeitungsschritte bezüglich der eingehenden Nachricht abgeschlossen sind, ggf. einschließlich der Ausführung des Benutzercodes (T) und des Sendens der Antwortnachricht.

Schließen eines Diensthosts

Die Aktivität "Schließen" (Z) des ServiceHost wird aus der Umgebungsaktivität erstellt.

Diagram showing synchronous scenarios: HTTP, TCP, or named pipes.

In <A: Name> ist A ein Shortcutsymbol, das die Aktivität im vorangegangenen Text und in Tabelle 3 beschreibt. Name ist ein verkürzter Name der Aktivität.

Wenn propagateActivity=true ist, haben Prozessaktionen des Clients und des Diensts dieselbe Aktivitäts-ID.

Synchrone Anforderung/Antwort mit Fehlern

Der einzige Unterschied zu dem vorherigen Szenario besteht darin, dass eine SOAP-Fehlernachricht als Antwortnachricht zurückgegeben wird. Wenn propagateActivity=true ist, wird die Aktivitäts-ID der Anforderungsnachricht zur SOAP-Fehlernachricht hinzugefügt.

Synchrone unidirektionale Kommunikation ohne Fehler

Der einzige Unterschied zu dem ersten Szenario ist, dass keine Nachricht an den Server zurückgegeben wird. Für HTTP-basierte Protokolle wird immer noch ein Status (gültig oder Fehler) an den Client zurückgegeben. Der Grund dafür ist, dass HTTP das einzige Protokoll mit Anforderungs-Anwort-Semantik ist, das Teil des WCF-Protokollstapels ist. Da TCP-Verarbeitung für WCF ausgeblendet wird, wird keine Bestätigung an den Client gesendet.

Synchrone unidirektionale Kommunikation mit Fehlern

Wenn während der Verarbeitung der Nachricht ein Fehler auftritt (Q oder darüber hinaus), wird keine Benachrichtigung an den Client zurückgegeben. Dies ist identisch mit dem Szenario „Synchrone unidirektionale Kommunikation ohne Fehler“. Sie sollten kein unidirektionales Szenario verwenden, wenn Sie eine Fehlermeldung empfangen möchten.

Duplex

Der Unterschied zu den vorherigen Szenarien besteht darin, dass der Client als Dienst fungiert, wobei er die ReceiveBytes- und die ProcessMessage-Aktivität erstellt, ähnlich wie bei den asynchronen Szenarien.