Erweiterte Fehlerbehandlung

In diesem Beispiel wird der Windows Communication Foundation (WCF)-Routingdienst veranschaulicht. Der Routingdienst ist eine WCF-Komponente, die das Integrieren eines inhaltsbasierten Routers in die Anwendung vereinfacht. In diesem Beispiel wird gezeigt, wie der Routingdienst eine intelligente Fehlerwiederherstellung mit Transaktionen und anderen komplexen Messagingkonzepten (z. B. Multicasting) ausführt.

Ee667251.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\Basic\RoutingServices\AdvancedErrorHandling

Beispieldetails

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. Eine Liste wird für Dienstwarteschlangen verwendet, die andere für Protokollwarteschlangen.

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. 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. Diese Aktion besteht darin, dass die Nachricht in die Systemwarteschlange für unzustellbare Meldungen verschoben wird.

So verwenden Sie dieses Beispiel

  1. Ee667251.Important(de-de,VS.100).gif Hinweis:
    Installieren Sie MSMQ, bevor Sie dieses Beispiel ausführen. Wenn MSMQ nicht installiert ist, wird beim Ausführen des Beispiels eine Ausnahmemeldung zurückgegeben. Anweisungen zum Installieren von MSMQ finden Sie unter Installieren von Message Queuing (MSMQ).

    Öffnen Sie mit Visual Studio 2010 AdvancedErrorHandling.sln.

  2. Drücken Sie in Visual Studio F5 oder F6.

    1. Wenn Sie die Anwendung mit F6 erstellen, müssen Sie die Anwendung mit ./RoutingService/bin/debug/RoutingService.exe starten.
  3. Drücken Sie die EINGABETASTE im Konsolenfenster, um den Client zu starten.

  4. Der Client gibt für jeden Fall eine andere Statistik zu den Warteschlangen zurück.

    1. Folgende Ausgabe wird in Fall 1 zurückgegeben (keine Fehler).

      Die eingehende Warteschlange weist 0 Meldungen auf.
      Die primäre Dienstwarteschlange weist 1 Meldung auf.
      Die Sicherungsdienstwarteschlange weist 0 Meldungen auf.
      Die primäre Protokollierungswarteschlange weist 1 Meldung auf.
      Die Sicherungsprotokollierungswarteschlange weist 0 Meldungen auf.
      Drücken Sie die <EINGABETASTE>, um den Vorgang fortzusetzen.

    2. Folgende Ausgabe wird in Fall 3 zurückgegeben (Fehler beim primären Dienst und der Protokollierungswarteschlange).

      Die eingehende Warteschlange weist 0 Meldungen auf. 
      Die primäre Dienstwarteschlange ist nicht vorhanden.
      Die Sicherungsdienstwarteschlange weist 1 Meldungen auf.
      Die primäre Protokollierungswarteschlange ist nicht vorhanden.
      Die Sicherungsprotokollierungswarteschlange weist 1 Meldungen auf.
      Drücken Sie die <EINGABETASTE>, um den Vorgang fortzusetzen.

    3. Folgende Ausgabe wird in Fall 4 zurückgegeben (Fehler bei der primären Dienstwarteschlange und bei der primären und Sicherungsprotokollierungswarteschlange).

      Die eingehende Warteschlange weist 0 Meldungen auf. 
      Die primäre Dienstwarteschlange ist nicht vorhanden.
      Die Sicherungsdienstwarteschlange weist 0 Meldungen auf.
      Die primäre Protokollierungswarteschlange ist nicht vorhanden.
      Die Sicherungsprotokollierungswarteschlange ist nicht vorhanden.
      Die Systemwarteschlange für unzustellbare Meldungen weist 1 Meldung auf.
      Drücken Sie zum Beenden die <EINGABETASTE>.

    4. Folgende Ausgabe wird in Fall 2 zurückgegeben (Fehler bei der primären Dienstwarteschlange).

      Die eingehende Warteschlange weist 0 Meldungen auf. 
      Die primäre Dienstwarteschlange ist nicht vorhanden.
      Die Sicherungsdienstwarteschlange weist 1 Meldungen auf.
      Die primäre Protokollierungswarteschlange weist 1 Meldung auf.
      Die Sicherungsprotokollierungswarteschlange weist 0 Meldungen auf.
      Drücken Sie die <EINGABETASTE>, um den Vorgang fortzusetzen.

Konfigurierbar über Code oder App.config

Das Beispiel wird so konfiguriert geliefert, dass die Datei App.config das Verhalten des Routers definiert. 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. Beide Methoden führen zum gleichen Routerverhalten.

Szenario

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.

Reales Szenario

Contoso möchte transaktionale Empfangsprozesse über den Routingdienst verwenden, um sicherzustellen, dass alle erforderlichen Dienste die Informationen auch beim Auftreten von Fehlern empfangen. 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. 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.