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.

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

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.

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.

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.

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.