HTTP-Bestätigungskanal

Der HTTP-Bestätigungskanal ist ein Beispiel für einen geschichteten Kanal, der das unidirektionale Nachrichtenmuster ändert, sodass nicht automatisch beim Eingang eine Bestätigung gesendet wird, sondern ein Dienst eingehende Nachrichten bestätigen oder ablehnen kann. Der HTTP-Bestätigungskanal ermöglicht es auch, dass der Dienst die Bestätigung verzögern kann, bis auf Geschäftsebene garantiert werden kann, dass die Nachricht verarbeitet wird.

Veranschaulicht

ReceiveContext, Beispiel für geschichteten Kanal (HTTP-Bestätigungskanal).

Diskussion

Der HTTP-Bestätigungskanal implementiert ReceiveContext, um das HTTP-Anforderungs-/Antwortnachrichtenmuster in ein unidirektionales Muster mit verzögerter Bestätigung umzugestalten. Mit diesem neuen Muster kann ein Dienst die Nachrichtenverarbeitung sicherstellen, indem eine Bestätigung in Form des HTTP-Statuscodes 200 (OK) gesendet wird, ohne dass der Client blockiert wird, solange die Nachrichtenverarbeitung nicht abgeschlossen ist. Oder er kann eine Fehlermeldung an den Client in Form des HTTP-Statuscodes 500 (Interner Serverfehler) senden. Ein Dienst könnte z. B. eine Bestätigung senden, nachdem er eine Nachricht in eine Warteschlange geschrieben hat, und anschließend mit der asynchronen Verarbeitung der Nachricht fortfahren. In diesem Szenario könnte ein Client sicherstellen, dass seine Nachrichten mindestens einmal vom Dienst verarbeitet wurden, indem er jede Nachricht so oft sendet, bis er eine Bestätigung vom Dienst erhält. Hinweis: Wenn ein Dienst eine schnelle asynchrone Nachrichtenverarbeitung über HTTP ohne Garantie der Nachrichtenverarbeitung erfordert, ist das OneWayBindingElement eine bessere Wahl.

ReceiveContext wird zum Halten der Nachricht verwendet, während festgestellt wird, ob die Nachricht beim Dienst verarbeitet werden kann. Die Fähigkeit eines Diensts, die Nachricht erfolgreich zu verarbeiten, wird durch Aufrufen der Complete-Methode im ReceiveContext-Objekt, das einen HTTP-OK-Statuscode sendet, angegeben. Durch Aufrufen der Abandon-Methode von ReceiveContext im ReceiveContext-Objekt wird angegeben, ob der Dienst die Nachricht verarbeiten kann.

In diesem Beispiel fordert der Client die Verarbeitung von Informationen, indem er eine Mitarbeiter-ID sendet. Wenn die beim Dienst eingegangene Mitarbeiter-ID größer als 50 ist, sendet der Dienst den HTTP-Statuscode 500 (Interner Serverfehler) an den Client zurück, andernfalls wird davon ausgegangen, dass die Verarbeitung erfolgreich ausgeführt werden kann, und der HTTP-Statuscode 200 (Erfolgreich) wird an den Client gesendet.

So richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Öffnen Sie Visual Studio 2010 mit Administratorrechten.

  2. Öffnen Sie die Projektmappe HttpAckChannel.

  3. Starten Sie eine neue Instanz des Service-Projekts, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und Debuggen auswählen und danach im Kontextmenü auf Neue Instanz starten klicken.

  4. Starten Sie eine neue Instanz des Client-Projekts, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und Debuggen auswählen und danach im Kontextmenü auf Neue Instanz starten klicken.

  5. Sobald der Dienst gestartet wurde, drücken Sie im Clientfenster auf die EINGABETASTE, damit der Client eine Nachricht an den Dienst sendet.

  6. Die erste Nachricht wird vom Dienst verarbeitet, und er sendet einen HTTP-OK-Statuscode an den Client zurück.

  7. Die zweite Nachricht ist fehlgeschlagen, und er sendet den HTTP-Statuscode für einen internen Serverfehler an den Client zurück, der eine CommunicationException auf dem Client auslöst.

Ee960152.Important(de-de,VS.100).gif Hinweis:
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.

<Installationslaufwerk>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

<Installationslaufwerk>:\WF_WCF_Samples\WCF\Extensibility\Channels\HttpAckChannel