Überbrückung und FehlerbehandlungBridging and Error Handling

Dieses Beispiel veranschaulicht die Verwendung des Windows Communication Foundation (WCF)-Routingdienst zum Überbrücken von Kommunikation zwischen einem Client und einem Dienst mit unterschiedliche Bindungen verwendet.This sample demonstrates how the Windows Communication Foundation (WCF) routing service is used for bridging communication between a client and a service that use different bindings. In diesem Beispiel wird auch gezeigt, wie ein Sicherungsdienst für Failoverszenarien verwendet wird.This sample also shows how to use a back-up service for failover scenarios. Der Routingdienst ist eine WCF-Komponente, die integrieren ein inhaltsbasierten Routers in die Anwendung aufnehmen vereinfacht.The routing service is a WCF component that makes it easy to include a content-based router in your application. In diesem Beispiel wird die standard-WCF--Rechnerbeispiel für die Kommunikation über den Routingdienst angepasst.This sample adapts the standard WCF Calculator Sample to communicate using the routing service.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. 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\Basic\RoutingServices\ErrorHandlingAndBridging

BeispieldetailsSample Details

In diesem Beispiel ist der Rechnerclient so konfiguriert, dass er Nachrichten an einen vom Router verfügbar gemachten Endpunkt sendet.In this sample, the Calculator client is configured to send messages to an endpoint exposed by the router. Der Routingdienst ist so konfiguriert, dass er alle gesendeten Nachrichten akzeptiert und diese an einen Endpunkt weiterleitet, der dem Rechnerdienst entspricht.The routing service is configured to accept all messages sent to it and to forward them to an endpoint that corresponds to the Calculator service. Die folgenden Punkte beschreiben die Konfiguration des primären Rechnerdiensts, des Sicherungsrechnerdiensts und des Rechnerclients. Außerdem wird erläutert, wie die Kommunikation zwischen dem Client und dem Dienst mithilfe des Routingdiensts erfolgt:The following points describe the configuration of the primary Calculator service, the back-up Calculator service, and the Calculator client and how the communication between the client and the service happens using the routing service:

  • Der Rechnerclient ist für die Verwendung von BasicHttpBinding und der Rechnerdienst für die Verwendung von NetTcpBinding eingerichtet.The Calculator client is configured to use BasicHttpBinding while the Calculator service is configured to use NetTcpBinding. Wenn erforderlich, konvertiert der Routingdienst die Nachrichten automatisch, bevor er sie an den Rechnerdienst sendet, und er konvertiert außerdem die Antworten, damit der Rechnerclient auf sie zugreifen kann.The routing service automatically converts the messages as necessary before sending them to the Calculator service and it also converts the responses so that the Calculator client can access them.

  • Der Routingdienst kennt zwei Rechnerdienste: den primären Rechnerdienst und den Sicherungsrechnerdienst.The routing service knows about two Calculator services: the primary Calculator service and the back-up Calculator service. Der Routingdienst versucht zuerst, mit dem primären Rechnerdienstendpunkt zu kommunizieren.The routing service first attempts to communicate with the primary Calculator service endpoint. Wenn der Endpunkt deaktiviert ist und dieser Versuch fehlschlägt, versucht der Routingdienst, mit dem Sicherungsrechnerdienstendpunkt zu kommunizieren.If this attempt fails due to the endpoint being down, the routing service then tries to communicate with the back-up Calculator service endpoint.

Somit werden vom Client gesendete Nachrichten vom Router empfangen und zum eigentlichen Rechnerdienst umgeleitet.Thus messages sent from the client are received by the router and are rerouted to the actual Calculator service. Wenn der Rechnerdienstendpunkt deaktiviert ist, leitet der Routingdienst die Nachricht an den Sicherungsrechnerdienstendpunkt weiter.If the Calculator service endpoint is down, the routing service routes the message to the back-up Calculator service endpoint. Nachrichten vom Sicherungsrechnerdienst werden an den Dienstrouter zurückgesendet, der sie dann zurück an den Rechnerclient übergibt.Messages from the back-up Calculator service are sent back to the service router, which in turn passes them back to the Calculator client.

Hinweis

Für eine Sicherungsliste kann mehr als ein Endpunkt definiert sein.A back-up list can have more than one endpoint defined. Wenn in diesem Fall der Sicherungsdienstendpunkt deaktiviert ist, versucht der Routingdienst solange, eine Verbindung mit dem nächsten Sicherungsendpunkt in der Liste herzustellen, bis die Verbindung besteht.In this case if the back-up service endpoint is down, the routing service attempts to connect to the next back-up endpoint in the list until a successful connection occurs.

So verwenden Sie dieses BeispielTo use this sample

  1. Öffnen Sie RouterBridgingAndErrorHandling.sln in Visual Studio 2012Visual Studio 2012.Using Visual Studio 2012Visual Studio 2012, open RouterBridgingAndErrorHandling.sln.

  2. Drücken Sie F5 oder STRG+UMSCHALT+B in Visual Studio.Press F5 or CTRL+SHIFT+B in Visual Studio

    1. Wenn Sie möchten die notwendigen Projekte automatisch gestartet, wenn Sie F5 drücken, mit der rechten Maustaste in der Projektmappe, wählen Sie Eigenschaften, und klicken Sie in der Startprojekt Knoten unter allgemeine EigenschaftenOption mehrere Startprojekte, und legen Sie alle Projekte auf starten.If you would like to auto-launch the necessary projects when you press F5, right-click the solution, select Properties, and in the Startup Project node under Common Properties, select Multiple Startup Projects, and set all projects to Start.

    2. Wenn Sie das Projekt mit STRG+UMSCHALT+B erstellen, müssen Sie die folgenden Anwendungen starten:If you build the project with CTRL+SHIFT+B, start the following applications:

      1. Rechnerclient (./CalculatorClient/bin/client.exe)Calculator client (./CalculatorClient/bin/client.exe)

      2. Rechnerdienst (./CalculatorService/bin/service.exe)Calculator service (./CalculatorService/bin/service.exe)

      3. Routingdienst (./RoutingService/bin/RoutingService.exe)Routing Service (./RoutingService/bin/RoutingService.exe)

  3. Drücken Sie auf dem Rechnerclient die EINGABETASTE, um den Client zu starten.In the Calculator Client, press ENTER to start the client.

    Die folgende Ausgabe wird angezeigt:You should see the following output:

    Add(100,15.99) = 115.99  
    Subtract(145,76.54) = 68.46  
    Multiply(9,81.25) = 731.25  
    Divide(22,7) = 3.14285714285714  
    

Konfigurierbar über Code oder App.configConfigurable Via Code or App.config

Das Beispiel wird so konfiguriert geliefert, dass die Datei App.config das Verhalten des Routers definiert.The sample ships configured to use an App.config file to define the router’s behavior. Sie können außerdem den Namen der Datei App.config ändern, damit er nicht erkannt wird, und die Auskommentierung des Methodenaufrufs von ConfigureRouterViaCode() aufheben.You can also change the name of the App.config file to something else so that it is not recognized and uncomment the method call to ConfigureRouterViaCode(). Beide Methoden führen zum gleichen Routerverhalten.Either method results in the same behavior from the router.

SzenarioScenario

In diesem Beispiel wird die Funktionsweise des Dienstrouters als Protokollbrücke und Fehlerhandler veranschaulicht.This sample demonstrates the service router acting as a protocol bridge and error handler. In diesem Szenario tritt kein inhaltsbasiertes Routing auf. Der Routingdienst fungiert als transparenter Proxyknoten, der für die direkte Übergabe der Nachrichten an einen vorkonfigurierten Satz von Zielendpunkten eingerichtet wurde.In this scenario, no content-based routing occurs; the routing service acts as a transparent proxy node configured to pass messages directly to a preconfigured set of destination endpoints. Der Routingdienst führt auch die zusätzlichen Schritte der transparenten Behandlung von Fehlern aus, die auftreten, wenn er versucht, Nachrichten an die Endpunkte zu senden, mit denen er gemäß seiner Konfiguration kommunizieren soll.The routing service also performs the additional steps of transparently handling errors that occur when it tries to send to the endpoints that it is configured to communicate with. Indem der Routingdienst als Protokollbrücke fungiert, ermöglicht er dem Benutzer, ein Protokoll für die externe Kommunikation und ein anderes Protokoll für die interne Kommunikation zu definieren.By acting as a protocol bridge, the routing service enables the user to define one protocol for external communication and another for internal communication.

Reales SzenarioReal World Scenario

Contoso möchte einen interoperablen Dienstendpunkt für die Umgebung bereitstellen und gleichzeitig die interne Leistung optimieren.Contoso wants to provide an interoperable service endpoint to the world, while optimizing performance internally. Aus diesem Grund werden die Dienste über einen Endpunkt mithilfe von BasicHttpBinding für die Umgebung verfügbar gemacht, während intern der Routingdienst für die Überbrückung der Verbindung mit dem Endpunkt verwendet wird. Dies erfolgt mithilfe der vom Dienst verwendeten NetTcpBinding.Thus it exposes its services to the world through an endpoint using the BasicHttpBinding, while internally using the routing service to bridge that connection to the endpoint using NetTcpBinding, which its services use. Weiterhin soll das Dienstangebot von Contoso gegenüber temporären Ausfällen der Produktionsdienste tolerant sein. Aus diesem Grund werden mehrere Endpunkte hinter dem Routerdienst virtualisiert, und bei einem Fehler erfolgt mithilfe der Fehlerbehandlungsfunktionen ein automatischer Wechsel zu den Sicherungsendpunkten, wenn erforderlich.Furthermore, Contoso wants its service offering to be tolerant of temporary outages in any one of their production services and thus virtualizes multiple endpoints behind the router service using the ’s error handling capabilities to automatically failover to back-up endpoints when necessary.

Siehe auchSee Also

AppFabric-Hosting und PersistenzbeispieleAppFabric Hosting and Persistence Samples