Freigeben über


Beispiel für einen sequenziellen Workflowdienst

Dieses Beispiel veranschaulicht, wie ein Workflowdienst mithilfe eines sequenziellen Workflows erstellt wird. In diesem Beispiel wird die Erstellung eines Dienstvertrags veranschaulicht, eine Methode zur Diensterstellung, die als "Workflow zuerst"-Modus bezeichnet wird. Dieses Beispiel erstellt einen ICalculator-Vertrag und wird während der Erstellung des Workflows in diesen implementiert.

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.

Die Implementierung des Rechners als Workflow hat u. a. folgende Vorteile:

  • Sie können einen Prozess mit langer Laufzeit starten, der den Workflowstatus automatisch speichert. Dies bedeutet, dass der Client mit der gleichen Instanz des Diensts kommunizieren kann, wenn der Workflowdienst neu gestartet wird.
  • Das Protokoll auf Anwendungsebene im Vertrag wird durchgesetzt. Wenn ein Vorgang unerwartet auf diesem Dienst aufgerufen wird, löst der Workflow eine Ausnahme aus.

Beispiel für einen sequenziellen Workflowdienst

In diesem Workflow verfügt die PowerOn-Empfangsaktivität über eine Eigenschaft namens CanCreateInstance, die als true markiert ist. Dies bedeutet, dass eine Instanz dieses Diensts erstellt wird, wenn der Client den PowerOn-Vorgang aufruft. Der Client empfängt den Kontext als Teil der Antwort für diesen Vorgang. Ausgehend von diesem Punkt können alle anderen Vorgänge im Workflow aufgerufen werden. Für jeden Vorgang, der vom Client aufgerufen wird, wird der Kontext an den Kanal gesendet, und daher kann der Vorgang an die richtige Instanz weitergeleitet werden. Wenn der PowerOff-Vorgang aufgerufen wird, wird ein boolescher Wert festgelegt, der bewirkt, dass der Workflow die while-Schleife beendet.

Der folgende Beispielcode veranschaulicht das WorkflowServiceHost -Aufrufmuster, das im Dienstprojekt in der Datei "Program.cs" implementiert ist.

WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();

Im vorhergehenden Beispielcode übernimmt der Konstruktor für WorkflowServiceHost die Workflowtypen als Eingabe und öffnet sie, um Nachrichten zu überwachen.

Dieses Beispiel enthält auch eine Clientanwendung, die Vorgänge auf dem Rechnerdienst aufruft. Die Clientanwendung ist ein sequenzieller Workflow und führt eine Reihe von Vorgangsaufrufen aus. Der Clientworkflow verwendet Sendeaktivitäten, um Vorgänge auf dem Workflow aufzurufen. Das Clientprojekt enthält Verweise auf den ICalculator-Dienst, die von der Send-Aktivität verwendet werden können, um die Benutzeroberfläche anzuzeigen, von der aus die entsprechenden Vorgänge aufgerufen werden können.

So richten Sie das Projekt ein, erstellen es und führen es aus

  1. Führen Sie die in One-time Setup Procedure for Windows Communication Foundation Samples aufgelisteten Setupanweisungen aus.

  2. Führen Sie zum Installieren der Persistenz-Anbieter das Skript "CreateStores.cmd" im Thema One-Time Setup Procedure for the Windows Communication Foundation Samples aus.

  3. In diesem Beispiel wird die Datenbank "NetFx35Samples_ServiceWorkflowStore" verwendet. Es schließt keinen Persistenzspeicher für den Clientworkflow ein. In diesem Beispiel wird davon ausgegangen, dass Sie SQL Server Express verwenden, worunter die Datenbanken installiert werden. Wenn Sie die Datenbank unter SQL Server installieren möchten, ändern Sie die Verbindungszeichenfolge in der Datei "App.config".

  4. Wenn Sie keine Persistenz-Provider verwenden möchten, kommentieren Sie den Abschnitt <WorkflowRuntime> von den App.config-Dateien aus.

  5. Führen Sie das Beispiel als Benutzer der Administratorgruppe aus. Wenn Sie Windows Vista verwenden, klicken Sie mit der rechten Maustaste auf die Clientprogrammdatei, und klicken Sie dann auf Als Administrator ausführen.

  6. Nach dem Start der Anwendung sendet der Clientworkflow einen Satz von Rechnervorgängen und schließt anschließend den Workflow ab. Sie können die EINGABETASTE drücken, um einen weiteren Satz von Rechnervorgängen zu senden.

  7. Um die lange Laufzeit dieses Diensts zu testen, fügen Sie einen Haltepunkt in die Clientanwendung ein. Wenn Sie den Haltepunkt in Visual Studio erreichen, schließen Sie die Dienstanwendung, und starten Sie sie neu. Geben Sie den Haltepunkt auf dem Client frei. Der Clientworkflow kommuniziert mit der gleichen Workflowinstanz auf dem Dienst. Sie können das Beispiel auch in zwei Projektmappen aufteilen, um die Wiederverwendung des Diensts zu testen.

So führen Sie das Beispiel auf separaten Computern aus

  1. Bearbeiten Sie die Konfigurationsdateien des Diensts und des Clients, und stellen Sie sicher, dass Sie den Servernamen in die Endpunktadresse ändern. Ändern Sie den Servernamen von localhost in den Namen des Computers, auf dem der Dienst ausgeführt werden soll.

  2. Der Dienst verwendet Port 8888, daher müssen Sie diesen Port in der Firewall öffnen. Klicken Sie in der Windows-Systemsteuerung auf Windows-Firewall. Klicken Sie auf Port hinzufügen, und fügen Sie dann Port 8888 hinzu. Sie können den Dienst auch über den Standardport ausführen. Entfernen Sie hierzu :8888 aus der Endpunktadresse.

  3. Bearbeiten Sie die Clientkonfigurationsdatei, und fügen Sie das folgende Element als untergeordnetes Element des <endpoint>-Elements hinzu.

    <identity>
        <UserPrincipalName value=”*@<Domain Name in which your server is running” />
    </identity>
    

    Starten Sie zum Ermitteln des Domänennamens den Dienst auf dem Computer, auf dem Sie ihn ausführen möchten. Führen Sie in einem Eingabeaufforderungsfenster auf dem anderen Computer den folgenden Befehl aus.

    svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc

    Dieser Befehl generiert eine CS-Datei und eine output.config-Datei. Kopieren Sie im <endpoint>-Element der Konfigurationsdatei das <identity>-Element in die Clientkonfigurationsdatei.

Senden Sie Kommentare zu diesem Thema an Microsoft.