WCF-Router auf Grundlage von Regeln

Bei einem SOAP-Router handelt es sich um einen Vermittler, der SOAP-Nachrichten auf Grundlage einer Gruppe von Regeln von einem Client an einen Anwendungsendpunkt weiterleitet. In diesem Beispiel wird mit Windows Communication Foundation (WCF) ein SOAP-Router erstellt.

Tipp

Zum Erstellen und Ausführen dieses Beispiels muss .NET Framework, Version 3.5 installiert sein. Zum Öffnen des Projekts und der Projektmappendateien ist Visual Studio 2008 erforderlich.

Der Router verwendet das Regelmodul von Windows Workflow Foundation (WF) zum Implementieren der Router-Kernfunktionen, mit der ermittelt wird, wohin eine bestimmte Nachricht weitergeleitet werden soll. In diesem Beispiel werden zwei Schlüsselkonzepte veranschaulicht: die gemeinsame Verwendung von Windows Workflow Foundation und WCF in einer Anwendung und die Verwendung des Regelmoduls von Windows Workflow Foundation außerhalb eines Workflows (auch als "eigenständig" bezeichnet).

Tipp

Sie können die Regeln in diesem Beispiel mit dem Beispiel für externes RuleSet-Toolkit anzeigen.

Tipp

Wenn Sie detaillierte Informationen zu den WCF-Aspekten des Routers benötigen, finden Sie diese in der Dokumentation zum Beispiel WCF Intermediary Router. In diesem Beispiel wird die Routerfunktionalität im Beispiel Intermediary Router durch eine regelbasierte ersetzt.

Das Beispiel besteht aus vier Projekten: ein Rechnerdienst, ein Echodienst, ein Router und ein Client. In diesem Beispiel sind der Rechner- und der Echodienst WCF-Standarddienste und in der Datei Calculator.cs bzw. EchoService.cs definiert.

Der Routerdienst verwendet WCF-Erweiterbarkeit für das Verarbeiten von Nachrichten und anderes Verhalten, beispielsweise das Behandeln von Transportmustern (Datagramm/Sitzung, Anforderung-Antwort/Duplex).

In der Quelldatei RouterTable.cs wird die Klasse definiert, die mithilfe des WF-Regelmoduls festlegt, wohin die vom Client empfangene Nachricht weitergeleitet werden soll. Wenn die einzelnen Nachrichten vom Router verarbeitet werden, ruft der Router RouterTable.SelectDestination() auf, um eine Endpunktadresse zum Weiterleiten der Nachricht abzurufen. Dies erfolgt auf Grundlage des Inhalts der Nachricht.

An dieser Stelle führt RouterTable.cs das RuleSet SelectDestination in Selectdestination.Rules aus, um zu bestimmen, an welche möglichen Endpunkte (Rechnerdienst oder Echodienst) die Nachricht weitergeleitet werden soll.

Zum Anzeigen oder Bearbeiten des SelectDestination-RuleSet sollten Sie es mit dem Beispiel für externes RuleSet-Toolkit aus .NET Framework, Version 3.5 SDK öffnen.

So öffnen Sie das RuleSet SelectDestination

  1. Starten Sie die Beispiel für externes RuleSet-Toolkit-Anwendung.

  2. Klicken Sie im Menü Daten auf Importieren.

  3. Wählen Sie im Dialogfeld Datei öffnen die Option router\SelectDestination.rules aus.

  4. Klicken Sie im RuleSet-Editor auf das RuleSet SelectDestination.

  5. Klicken Sie im Dialogfeld Workflow-/Typauswahl auf Durchsuchen.

  6. Wechseln Sie im geöffneten Dateidialogfeld zum Ordner router/bins, und klicken Sie auf WCF_Router.Router.exe.

  7. Klicken Sie im Dialogfeld Workflow-/Typauswahl im Abschnitt Enthaltene Typen auf RoutingTable, und klicken Sie dann auf OK.

  8. Erweitern Sie in der Anwendung External RuleSet Toolkit SelectDestination, klicken Sie auf Version 1.0 und anschließend auf Regeln bearbeiten.

  9. Wenn es in External RuleSet Toolkit geöffnet wird, wird das RuleSet SelectDestination wie in der folgenden Abbildung dargestellt angezeigt.

Ausgabe des Beispiels zu WCF-Router auf der Grundlage von Regeln

Das RuleSet SelectDestination in External RuleSet Toolkit

Es gibt sechs Regeln im RuleSet SelectDestination. Im Folgenden werden die einzelnen Regeln beschrieben, beginnend mit der höchsten Priorität bis zur niedrigsten Priorität.

  1. Initialize variables: Initialisiert die Variablen in der RouterTable-Klasse, damit sie von den anderen Regeln verwendet werden können.
  2. CalculatorService: Überprüft, ob eine Nachricht die Kriterien zum Weiterleiten der Nachricht an CalculatorService erfüllt (die Nachrichten müssen den Header "calculator" enthalten). Wenn dies der Fall ist, wird der CalculatorService-Endpunkt der Liste der möglichen Endpunkte hinzugefügt, an die die Nachricht weitergeleitet werden kann.
  3. EchoService: Überprüft, ob eine Nachricht die Kriterien zum Weiterleiten der Nachricht an EchoService erfüllt (die Nachrichten müssen den Aktionsnachrichtenheader http://microsoft.servicemodel.samples/iechoservice/echo enthalten). Wenn dies der Fall ist, wird der EchoService-Endpunkt der Liste der möglichen Endpunkte hinzugefügt, an die die Nachricht weitergeleitet werden kann.
  4. No matches: Überprüft, ob es keine möglichen Endpunkte gibt, an die die Nachricht weitergeleitet werden kann. Bei true wird dies in der Konsole protokolliert.
  5. One match: Überprüft, ob es genau einen möglichen Endpunkt gibt, an den die Nachricht weitergeleitet werden kann. Bei true wird die Nachricht an diesen Endpunkt weitergeleitet.
  6. Multiple match: Überprüft, ob es mehrere mögliche Endpunkte gibt, an die die Nachricht weitergeleitet werden kann. Bei true wird die Nachricht an einen zufällig in der Liste der möglichen Endpunkte ausgewählten Endpunkt weitergeleitet.

Für dieses RuleSet wird ein Feature von .NET Framework 3.5 für Windows Workflow Foundation-Regeln verwendet: die Möglichkeit, das new-Schlüsselwort zum Aufrufen von Klassenkonstruktoren zu verwenden. Wenn beispielsweise bei der CalculatorService-Regel die Nachricht die Kriterien erfüllt, fügt die Regel der Liste der möglichen Adressen eine neue EndpointAddress hinzu.

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

Echo("Is anyone there?") returned: Is anyone there?
Add(5) returned: 5
Add(-3) returned: 2

So erstellen Sie das Beispiel und führen es aus

  1. Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend ausführen möchten, befolgen Sie die Anweisungen in Running the Windows Communication Foundation Samples, mit den folgenden Ausnahmen.

    • Bei Konfigurationen mit einem einzigen Computer oder computerübergreifend werden vier Projekte und vier ausführbare Dateien benötigt: eine für den Client, eine für den SOAP-Router und jeweils eine für jeden Anwendungsdienst.
    • In einer computerübergreifenden Konfiguration müssen die folgenden Änderungen an den vier Konfigurationsdateien vorgenommen werden.
    • Ändern Sie Zeile 21 der Datei "App.config" für CalculatorService und EchoService. Der localhost-Hostname muss durch den echten Hostnamen des Vermittlers ersetzt werden.
    • Ändern Sie Zeile 16 der Datei "App.config" des Routers. Die beiden (durch "|" getrennten) Adressen müssen in den Hostnamen von EchoService bzw. CalculatorService geändert werden.
    • Ändern Sie die Zeilen 5 und 7 der Datei "App.config" des Clients. Der localhost-Hostname muss durch den echten Hostnamen des Vermittlers ersetzt werden.
    • Sie können auch das ServiceModel Metadata Utility Tool (Svcutil.exe) für die beiden Anwendungsdienste ausführen (sobald sie mit der richtigen Adresse aktualisiert wurden) und die "App.config"-Dateien neu generieren.
  2. Stellen Sie sicher, dass der Router, EchoService und CalculatorService ausgeführt werden, bevor Sie den Client starten. Jeder der drei Dienste zeigt beim Start die Endpunktadressen an, die sie überwachen.

    Tipp

    Der EchoService-Anwendungsendpunkt und der CalculatorService-Anwendungsendpunkte verwenden die Adresse des Routers.

  3. Führen Sie den Client aus. Der Client kontaktiert zuerst den EchoService und dann den CalculatorService. Der Router zeigt die WS-Addressierungsaktionen von weitergeleiteten Nachrichten in beide Richtungen an.

    Tipp

    Wenn sich "Client.exe" und "Router.exe" auf unterschiedlichen Computern befinden, heben Sie die Auskommentierung des Abschnitts <identity/> in der Datei "Client.exe.config" auf und legen als Benutzerprinzipalnamen den Namen des Benutzers fest, der "Router.exe" ausführt.

Siehe auch

Aufgaben

Beispiel für externes RuleSet-Toolkit

Weitere Ressourcen

Intermediary Router

Senden Sie Kommentare zu diesem Thema an Microsoft.