Dynamische Neukonfiguration

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 das standardmäßige WCF-Rechnerbeispiel für die Kommunikation über den Routingdienst angepasst. In diesem Beispiel wird gezeigt, wie der Routingdienst während der Laufzeit dynamisch neu konfiguriert werden kann.

Ee667250.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\DynamicReconfiguration

Beispieldetails

Damit der Routingdienst während der Laufzeit dynamisch neu konfiguriert werden kann, wird in diesem Beispiel alle fünf Sekunden ein Timer ausgelöst, mit dem ein neues RoutingConfiguration-Objekt erstellt und angewendet wird. Diese Konfiguration verweist entweder auf den reguläre Rechnerendpunkt oder auf den Rundungsrechnerendpunkt. Die Meldungen der Rechnerclientanwendung werden von einem der beiden Dienste zurückgegeben, abhängig davon, auf welchem Dienst der Routingdienst für das Routing zu der jeweiligen Zeit konfiguriert ist.

Es wird die Funktion des Routingdiensts zur dynamischen Neukonfiguration über ein benutzerdefiniertes Verhalten verwendet. Mit diesem benutzerdefinierten Verhalten wird eine Diensterweiterung angefügt, die einen einfachen Threadtimer enthält. Der Timer wird alle fünf Sekunden ausgelöst und verursacht damit einen Rückruf zur UpdateRules-Methode. Mit dem Rückruf wird die neue Routingkonfiguration erstellt und übernommen. In einer tatsächlichen Bereitstellung würde dieser Rückruf wahrscheinlich als Ergebnis eines anderen Ereignistyps (z. B. einer SQL-Ereignisbenachrichtigung oder einer WS-Discovery-Ankündigung) erfolgen.

So verwenden Sie dieses Beispiel

  1. Öffnen Sie mit Visual Studio 2010 DynamicReconfiguration.sln.

  2. Wählen Sie im Menü Ansicht die Option Projektmappen-Explorer aus, um Projektmappen-Explorer zu öffnen.

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

    1. Wenn die notwendigen Projekte automatisch gestartet werden sollen, wenn Sie auf F5 drücken, klicken SIe mit der rechten Maustaste auf die Projektmappe, und wählen Sie Eigenschaften aus. Wählen Sie im linken Bereich unter Allgemeine Eigenschaften den Knoten Startprojekt aus. Aktivieren Sie das Optionsfeld Mehrere Startprojekte, und legen Sie für alle Projekte die Aktion Start fest.

    2. Wenn Sie das Projekt mit F6 erstellen, müssen Sie die folgenden Anwendungen starten:

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

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

      3. Routingrechnerdienst (./RoundingCalcService/bin/service.exe)

      4. Routingdienst (./RoutingService/bin/RoutingService.exe)

  4. Drücken Sie im Konsolenfenster des Rechnerclients die EINGABETASTE, um den Client zu starten und die Rechnerdienstvorgänge aufzurufen.

    Der Routingdienst leitet abwechselnd Meldungen an den Rundungsrechner und den regulären Rechner, da die Routingkonfiguration sich alle fünf Sekunden ändert. Abhängig davon, an welchen Endpunkt der Routingdienst Meldungen laut Konfiguration senden soll, ist die Ausgabe im Clientkonsolenfenster jeweils unterschiedlich.

  5. Drücken Sie mindestens fünf Sekunden lang wiederholt die EINGABETASTE, und achten Sie auf die Änderung der Ergebnisse des Diensts.

    1. Die zurückgegebene Ausgabe, wenn der Routerdienst zum Routen von Meldungen an den Rundungsrechnerdienst konfiguriert ist, sieht folgendermaßen aus:

      Add(100,15.99) = 116
      Subtract(145,76.54) = 68.5
      Multiply(9,81.25) = 731.2
      Divide(22,7) = 3.1

    2. Die zurückgegebene Ausgabe, wenn der Routingdienst zum Routen von Meldungen an den regulären Rechnerdienst konfiguriert ist, sieht folgendermaßen aus:

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

  6. Vom Rechnerdienst und der Rundungsrechnerdienst wird außerdem ein Protokoll der Vorgänge gedruckt, die in den jeweiligen Konsolenfenstern aufgerufen werden.

  7. Geben Sie zum Beenden im Clientkonsolenfenster "quit" ein, und drücken Sie die EINGABETASTE.

  8. Drücken Sie die EINGABETASTE in den Dienstkonsolenfenstern, um die Dienste zu beenden.

Szenario

In diesem Beispiel wird der Router als inhaltsbasierter Router dargestellt, der ermöglicht, dass mehrere Typen oder Implementierungen von Diensten über einen Endpunkt verfügbar gemacht zu werden.

Reales Szenario

Contoso möchte sämtliche Dienste virtualisieren, um nur einen Endpunkt öffentlich verfügbar zu machen, über den Zugriff auf mehrere verschiedene Dienste gewährt wird. In diesem Fall werden die inhaltsbasierten Routingfunktionen des Routingdiensts verwendet, um zu bestimmen, wohin die eingehenden Anforderungen gesendet werden sollen.