HTTP-BestätigungskanalHTTP Acknowledgement Channel

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.The HTTP Acknowledgement Channel is an example of a layered channel that changes the one-way messaging pattern, allowing a service to acknowledge or refuse incoming messages rather than automatically sending an acknowledgement on receipt. 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.The HTTP Acknowledgement Channel also allows the service to delay acknowledgement until it can make a business-level guarantee that the message will be processed.

VeranschaulichtDemonstrates

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

DiskussionDiscussion

Der HTTP-Bestätigungskanal implementiert ReceiveContext, um das HTTP-Anforderungs-/Antwortnachrichtenmuster in ein unidirektionales Muster mit verzögerter Bestätigung umzugestalten.The HTTP Acknowledgement Channel implements ReceiveContext to reshape the HTTP request-reply messaging pattern to a one-way pattern with delayed acknowledgement. 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.Using this new pattern, a service can ensure message processing by sending an acknowledgement in the form of an HTTP OK status code of 200 without blocking the client until message processing completes or can send a failure message to the client in the form of an HTTP Internal Server error status code of 500. 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.For example, a service could send an acknowledgement after writing a message to a queue, and then continue processing the message asynchronously. 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.In this scenario, a client could be assured its messages were processed at least once by the service, if it re-sent each message until it received an acknowledgement from the service. Hinweis: Wenn ein Dienst eine schnelle asynchrone Nachrichtenverarbeitung über HTTP ohne Garantie der Nachrichtenverarbeitung erfordert, ist das OneWayBindingElement eine bessere Wahl.Note that, if a service requires fast asynchronous message processing over HTTP without any message processing guarantees, then the OneWayBindingElement is a more appropriate choice.

ReceiveContext wird zum Halten der Nachricht verwendet, während festgestellt wird, ob die Nachricht beim Dienst verarbeitet werden kann.ReceiveContext is used to hold the message in place while it is determined whether the message can be processed at the service. 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 ReceiveContext-Methode von Abandon im ReceiveContext-Objekt wird angegeben, ob der Dienst die Nachricht verarbeiten kann.The ability of a service to successfully process the message is indicated by calling Complete on the ReceiveContext object that sends an HTTP OK status code and whether the service can process the message is indicated by calling ReceiveContext’s Abandon method on the ReceiveContext object, which sends an HTTP Internal Server error status code.

In diesem Beispiel fordert der Client die Verarbeitung von Informationen, indem er eine Mitarbeiter-ID sendet.In this example, the client requests processing information by sending an employee ID. 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.On the service end, if the employee ID received is greater than 50, the service sends an HTTP Status code of 500 (Internal Server Error) back to the client, otherwise it is assumed that the processing can be successfully done and sends an HTTP Status code of 200 (Successful) to the client.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Öffnen Sie Visual Studio 2012Visual Studio 2012 mit Administratorrechten.Open Visual Studio 2012Visual Studio 2012 with Administrator privileges.

  2. Öffnen der HttpAckChannel Lösung.Open the HttpAckChannel solution.

  3. Starten Sie eine neue Instanz der dem Service Projekt, indem Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, auswählen und Debuggen, neue Instanz starten aus dem Kontextmenü.Start a new instance of the Service project by right clicking the project in Solution Explorer, and selecting Debug, Start new instance from the context menu.

  4. Starten Sie eine neue Instanz der dem Client Projekt, indem Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, auswählen und Debuggen, und neue Instanz starten aus dem Kontextmenü.Start a new instance of the Client project by right clicking the project in Solution Explorer, and selecting Debug, and Start new instance from the context menu.

  5. Sobald der Dienst gestartet wurde, drücken Sie im Clientfenster auf die EINGABETASTE, damit der Client eine Nachricht an den Dienst sendet.Once the service has started, press ENTER in the client window to let the client send a message to the service.

  6. Die erste Nachricht wird vom Dienst verarbeitet, und er sendet einen HTTP-OK-Statuscode an den Client zurück.The first message is processed on the service, and it sends an HTTP OK status code back to the client.

  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.The second message is unsuccessful, and it sends an HTTP Internal Server error status code back to the client, which raises a CommunicationException on the client.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

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