Erweiterte FehlerbehandlungAdvanced Error Handling

In diesem Beispiel wird der Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Routingdienst veranschaulicht.This sample demonstrates the Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) routing service. Der Routingdienst ist eine WCFWCF-Komponente, die das Integrieren eines inhaltsbasierten Routers in die Anwendung vereinfacht.The routing service is a WCFWCF component that makes it easy to include a content-based router in your application. In diesem Beispiel wird gezeigt, wie der Routingdienst eine intelligente Fehlerwiederherstellung mit Transaktionen und anderen komplexen Messagingkonzepten (z. B. Multicasting) ausführt.This sample shows how the routing service intelligently recovers from errors, using transactions and other more complex messaging concepts such as multicasting.

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, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.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)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\AdvancedErrorHandling

BeispieldetailsSample Details

In diesem Beispiel wird der Routingdienst konfiguriert, um eine Nachricht aus einer MSMQ-Warteschlange zu lesen und die Nachricht per Multicast an zwei Warteschlangenlisten zu senden.In this sample, the routing service is configured to read a message from an MSMQ queue and multicast this message to two lists of queues. Eine Liste wird für Dienstwarteschlangen verwendet, die andere für Protokollwarteschlangen.One list is used for service queues and another is used for logging queues.

Da die MSMQ-Bindung, die der Routingdienst laut Konfiguration verwenden soll, normalerweise die Verwendung von Transaktionen unterstützt, stellt der Routingdienst sicher, dass die Meldung transaktionsfähig ist und von mindestens einer Warteschlange in jeder Liste empfangen wurde. Erst dann wird eine Meldung an die eingehende Warteschlange (InQ) gesendet, dass die Nachricht erfolgreich geroutet wurde.Because, by default, the MSMQ binding that the routing service is configured to use supports the use of transactions, the routing service makes sure that the message is transactional and received by at least one queue in each list before reporting to the Inbound Queue (InQ) that the message was successfully routed. Wenn deshalb beide Dienstwarteschlangen oder beide Protokollwarteschlangen nicht verfügbar sind, meldet der Routingdienst, dass die Nachricht nicht geroutet werden konnte und die eingehende Warteschlange eine Aktion ausführen sollte.Thus, in the case where both of the service queues or both of the logging queues are unavailable, the routing service reports that the message could not be routed and the inbound queue should take some action. Diese Aktion besteht darin, dass die Nachricht in die Systemwarteschlange für unzustellbare Meldungen verschoben wird.This action consists of moving the message to the system dead letter queue.

So verwenden Sie dieses BeispielTo use this sample

  1. Wichtig

    Installieren Sie MSMQ, bevor Sie dieses Beispiel ausführen.Install MSMQ before running this sample. Wenn MSMQ nicht installiert ist, wird beim Ausführen des Beispiels eine Ausnahmemeldung zurückgegeben.If MSMQ is not installed, an exception message is returned when running the sample. Anweisungen zum Installieren von MSMQ finden Sie unter Installieren von Message Queuing (MSMQ).Instructions for installing MSMQ can be found at Installing Message Queuing (MSMQ).

    Öffnen Sie mit Visual Studio 2012Visual Studio 2012 AdvancedErrorHandling.sln.Using Visual Studio 2012Visual Studio 2012, open AdvancedErrorHandling.sln.

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

    1. Wenn Sie die Anwendung mit STRT+UMSCHALT+B erstellen, müssen Sie die Anwendung mit ./RoutingService/bin/debug/RoutingService.exe starten.If you build the application with CTRL+SHIFT+B, you must start the application at ./RoutingService/bin/debug/RoutingService.exe.
  3. Drücken Sie die EINGABETASTE im Konsolenfenster, um den Client zu starten.In the console window, press ENTER to start the client.

  4. Der Client gibt für jeden Fall eine andere Statistik zu den Warteschlangen zurück.The client returns different statistics about the queues for each case.

    1. Folgende Ausgabe wird in Fall 1 zurückgegeben (keine Fehler).The following is the output returned for case 1 (no failures).

      The inbound queue has 0 messages.  
      The primary service queue has 1 messages.   
      The backup service queue has 0 messages.   
      The primary logging queue has 1 messages.   
      The backup logging queue has 0 messages.   
      Press <Enter> to continue  
      
    2. Folgende Ausgabe wird in Fall 3 zurückgegeben (Fehler beim primären Dienst und der Protokollierungswarteschlange).The following is the output returned for case 3 (primary service and logging queue failures).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.   
      The backup service queue has 1 messages.   
      The primary logging queue does not exist.   
      The backup logging queue has 1 messages.   
      Press <ENTER> to continue.  
      
    3. Folgende Ausgabe wird in Fall 4 zurückgegeben (Fehler bei der primären Dienstwarteschlange und bei der primären und Sicherungsprotokollierungswarteschlange).The following is the output returned for case 4 (primary service queue and primary and backup logging queue failures).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.  
      The backup service queue has 0 messages.   
      The primary logging queue does not exist.   
      The backup logging queue does not exist.   
      The System Dead Letter queue has 1 messages.   
      Press <ENTER> to Quit.  
      
    4. Folgende Ausgabe wird in Fall 2 zurückgegeben (Fehler bei der primären Dienstwarteschlange).The following is the output returned for case 2 (primary service queue failure).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.  
      The backup service queue has 1 messages.   
      The primary logging queue has 1 messages.   
      The backup logging queue has 0 messages.   
      Press <ENTER> to continue.  
      

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 auch den Namen der Datei RoutingService\App.config ändern, damit diese nicht erkannt wird, und den Wert des configDriven-Felds in RoutingService\Program.cs auf false festlegen, um die im Code definierte Konfiguration zu verwenden.You can also change the name of the RoutingService\App.config file to something else so that it is not recognized and change the value of the configDriven field in RoutingService\Program.cs to false to use the configuration defined in the code. Beide Methoden führen zum gleichen Routerverhalten.Either method results in the same behavior from the router.

SzenarioScenario

In diesem Beispiel wird gezeigt, dass der Routingdienst erweiterte Messagingfunktionen behandeln kann, z. B. Transaktions- und Empfangskontext, und dass es diese Funktionen als Bestandteil der ordnungsgemäßen Behandlung von Fehlerszenarien verwenden kann.This sample demonstrates that the routing service can handle advanced messaging capabilities, such as transactions and receive context, and that it can utilize these capabilities as a part of correctly handling error scenarios.

Reales SzenarioReal World Scenario

Contoso möchte transaktionale Empfangsprozesse über den Routingdienst verwenden, um sicherzustellen, dass alle erforderlichen Dienste die Informationen auch beim Auftreten von Fehlern empfangen.Contoso wants to utilize transactional receives through the routing service to ensure that all necessary services receive information even during error conditions. Außerdem sollen Fehler richtig und automatisch behandelt und Fehler gemeldet werden, falls eine Nachricht auch dann nicht zugestellt werden kann, wenn die Fehlerbehandlungslogik verwendet wird.Furthermore, they would like errors to be handled correctly and automatically and failures to be reported in the case that a message is undeliverable even when error handling logic is utilized. Zu diesem Zweck wird der Routingdienst so konfiguriert, dass erwartungsgemäß ein Failover zu bestimmten Endpunkten ausgeführt wird. Der Routingdienst behandelt ggf. Fehlersituationen einschließlich Erstellung, Abschluss und Rollback/Abbrechen von Transaktionen/Empfangskontexten.For this purpose, they configure the routing service to fail over to specific endpoints as expected and the routing service handles the error situations, which includes the creation, completion, and rollback/aborting of transactions/receive contexts as necessary.

Siehe auchSee Also

AppFabric-Hosting und PersistenzbeispieleAppFabric Hosting and Persistence Samples