Vorgehensweise: Erstellen eines Workflowdiensts zum Aufrufen eines anderen WorkflowdienstsHow to: Create a Workflow Service That Calls Another Workflow Service

Unter bestimmten Umständen ist es erforderlich, dass Informationen von Workflowdiensten von anderen Workflowdiensten abgerufen werden.It is sometimes necessary for a workflow service to obtain information from another workflow service. In diesem Thema wird veranschaulicht, wie Sie einen Workflowdienst in einem anderen Workflowdienst aufrufen können.This topic demonstrates how to call one workflow service from another. In diesem Thema werden zwei Workflowdienste erstellt: ein Workflowdienst mit einer Methode zur Umkehrung der Eingabezeichenfolge und ein Workflowdienst zur Konvertierung der umgekehrten Eingabezeichenfolge in Großbuchstaben.In this topic, we’ll create two workflow services; one that has a method that reverses the input string, and another that converts the input string to uppercase after reversing the string that uses the first service.

So erstellen Sie den Reverser-WorkflowdienstTo create the Reverser workflow service

  1. Führen Sie Visual Studio 2012Visual Studio 2012 als Administrator aus.Run Visual Studio 2012Visual Studio 2012 as an administrator.

  2. Wählen Sie Datei, neues Projekt.Select File, New Project. Klicken Sie unter der Workflow Knoten in der installierte Vorlagen klicken Sie im Bereich WCF-Workflowdienstanwendung.Under the Workflow node in the Installed Templates pane, select WCF Workflow Service Application. Nennen Sie die Projektmappe NestedServices , und klicken Sie dann auf OK.Name the solution NestedServices and then click OK.

  3. Klicken Sie unter Server, stellen Sie sicher, dass lokalen IIS-Webserver verwenden ausgewählt ist.Under Servers, make sure that Use Local IIS Web Server is selected. Klicken Sie auf erstellt ein virtuelles Verzeichnis.Click Create Virtual Directory. Klicken Sie auf OK in der Meldung, dass das virtuelle Verzeichnis wurde erfolgreich erstellt wurde.Click OK in the dialog box stating that the virtual directory was successfully created.

  4. Benennen Sie im Projektmappen-Explorer Service1.xamlx zu StringReverserService.xamlx.In Solution Explorer, rename Service1.xamlx to StringReverserService.xamlx.

  5. Auf der Projekteigenschaften Seite für das neue Projekt, klicken Sie auf die Web Registerkarte. Legen Sie die Startaktion auf bestimmte Seite, und wählen Sie StringReverserService.xamlx als Startseite.On the Project Properties page for the new project, click the Web tab. Set the Start Action to Specific Page, and select StringReverserService.xamlx as the page to start.

  6. Öffnen Sie StringReverserService.xamlx im Designer, löschen Sie die vorhandenen Aktivitäten ReceiveRequest und SendReply, und ziehen Sie eine ReceiveAndSendReply-Aktivität in die vorhandene Sequenzaktivität.Open StringReverserService.xamlx in the designer and delete the existing ReceiveRequest and SendReply activities, and then drag a ReceiveAndSendReply activity into the existing sequence activity.

    1. Legen Sie die OperationName auf reversestring fest.Set the OperationName to ReverseString.

    2. Legen Sie die ServiceContractName auf ireversestring fest.Set the ServiceContractName to IReverseString.

    3. Wählen Sie die CanCreateInstance Kontrollkästchen.Select the CanCreateInstance check box.

  7. Wählen Sie die SequentialService Aktivität aus, und klicken Sie dann auf die Variablen Registerkarte am unteren Rand des Designers.Select the SequentialService activity, and then click the Variables tab at the bottom of the designer. Erstellen Sie zwei neue Variablen vom Typ String mit den Namen StringToReverse und ReversedStringToReturn.Create two new variables named StringToReverse and ReversedStringToReturn of type String.

  8. Klicken Sie auf die definieren wiederherstellungsverknüpfung in der Receive Aktivität.Click the Define link in the Receive activity. Klicken Sie auf die Parameter, und erstellen Sie einen Parameter mit dem Namen InputString vom Typ String, der StringToReverse zugewiesen.Click the Parameters, and create a parameter named InputString of type String that assigns to StringToReverse.

  9. Klicken Sie auf die definieren wiederherstellungsverknüpfung in der SendReplyToReceive Aktivität.Click the Define link in the SendReplyToReceive activity. Klicken Sie auf die Parameter, und erstellen Sie einen Parameter mit dem Namen ReversedString vom Typ String, ReversedStringToReturn zugewiesen.Click the Parameters, and create a parameter named ReversedString of type String, assigned to ReversedStringToReturn.

  10. Erstellen Sie im Projekt eine neue Klasse mit dem Namen StringLibrary, um die Logik für den Dienst zu implementieren.To implement the logic for the service, create a new class in the project called StringLibrary. Ersetzen Sie die Klassendefinition durch den folgenden Code:Replace the class definition with the following code.

    public class StringLibrary  
        {  
            public static String ReverseString(string StringToReverse)  
            {  
                char[] charArray = StringToReverse.ToCharArray();  
                Array.Reverse(charArray);  
                return new String(charArray);  
            }  
        }  
    
  11. Um die ReverseString-Methode für die Eingabe aufzurufen, ziehen Sie ein InvokeMethod Aktivität aus der Toolbox auf den Abstand zwischen den Receive und SendReply Aktivitäten.To call the ReverseString method on the input, drag an InvokeMethod activity from the toolbox to the space between the Receive and SendReply activities. Legen Sie die Eigenschaften der Aktivität wie folgt fest:Set the properties of the activity as follows:

    1. Methodenname: ReverseStringMethodName: ReverseString

    2. Ergebnis: ReversedStringToReturnResult: ReversedStringToReturn

    3. Parameter: Erstellen Sie einen neuen Parameter mit einem Richtung von In, eine Typ -Zeichenfolge, und ein Wert stringtoreverse.Parameters: Create a new parameter with a Direction of In, a Type of String, and a Value of StringToReverse.

    4. TargetType: NestedServices.StringLibraryTargetType: NestedServices.StringLibrary

  12. Testen Sie den Dienst durch Drücken von F5.Test the service by pressing F5. Doppelklicken Sie im angezeigten WCF-Testclient auf die ReverseString()-Methode.In the WCF Test Client that appears, double-click the ReverseString() method. Geben Sie im Bereich Anforderung Sample für den Wert der InputString-Parameter.In the Request pane, enter Sample for the Value of the InputString parameter. Klicken Sie auf Aufrufen.Click Invoke. Die Rückgabe des Diensts sollte "elpmaS" lauten.The service should return "elpmaS".

So erstellen Sie den UpperCaser-WorkflowdienstTo create the UpperCaser workflow service

  1. Mit der rechten Maustaste des NestedServices-Projekts, und wählen Sie hinzufügen, neues Element.Right-click the NestedServices project and select Add, New Item. In der Workflow Knoten WCF-Workflowdienst, und nennen Sie den neuen Dienst UpperCaserService.In the Workflow node, select WCF Workflow Service, and name the new service UpperCaserService. Klicken Sie auf Hinzufügen.Click Add. Dadurch sollte dem Projekt der neue Workflowdienst UpperCaserService.xamlx hinzugefügt werden.This should add a new workflow service called UpperCaserService.xamlx to the project.

  2. Öffnen Sie UpperCaserService.xamlx im Designer, und löschen Sie die vorhandene ReceiveRequest und SendReply Aktivitäten, und ziehen Sie eine ReceiveAndSendReply Aktivität in die vorhandene Sequenzaktivität.Open UpperCaserService.xamlx in the designer and delete the existing ReceiveRequest and SendReply activities, and drag a ReceiveAndSendReply activity into the existing sequence activity.

    1. Legen Sie die OperationName auf UppercaseString fest.Set the OperationName to UpperCaseString.

    2. Legen Sie die ServiceContractName auf iuppercasestring fest.Set the ServiceContractName to IUpperCaseString.

    3. Wählen Sie die CanCreateInstance Kontrollkästchen.Select the CanCreateInstance check box.

  3. Wählen Sie die Aktivität sequentialservice aus, und klicken Sie dann auf die Variablen Registerkarte am unteren Rand des Designers.Select the SequentialService activity, and then click the Variables tab at the bottom of the designer. Erstellen Sie drei neue Variablen vom Typ String mit den Namen StringToUpper, StringToReverse und StringToReturn.Create three new variables named StringToUpper, StringToReverse, and StringToReturn of type String.

  4. Klicken Sie auf die definieren wiederherstellungsverknüpfung in der Receive Aktivität.Click the Define link in the Receive activity. Klicken Sie auf die Parameter, und erstellen Sie einen Parameter mit dem Namen InputString vom Typ String, der StringToUpper zugewiesen.Click the Parameters, and create a parameter named InputString of type String that assigns to StringToUpper.

  5. Klicken Sie auf die definieren wiederherstellungsverknüpfung in der SendReplyToReceive Aktivität.Click the Define link in the SendReplyToReceive activity. Klicken Sie auf die Parameter, und erstellen Sie einen Parameter mit dem Namen ModifiedString vom Typ String, StringToReturn zugewiesen.Click the Parameters, and create a parameter named ModifiedString of type String, assigned to StringToReturn.

  6. Erstellen Sie mit dem folgenden Code eine neue Methode in der StringLibrary-Klasse, um die Logik für den Dienst zu implementieren.To implement the logic for the service, create a new method in the StringLibrary class using the following code.

    public static String UpperCaseString(string StringToUpperCase)  
    {  
         return StringToUpperCase.ToUpper();  
    
    }  
    
  7. Um die UpperCaseString-Methode für die Eingabe aufzurufen, ziehen Sie ein InvokeMethod Aktivität aus der Toolbox auf den Abstand zwischen den Receive und SendReply Aktivitäten.To call the UpperCaseString method on the input, drag an InvokeMethod activity from the toolbox to the space between the Receive and SendReply activities. Legen Sie die Eigenschaften der Aktivität wie folgt fest:Set the properties of the activity as follows:

    1. Methodenname: UpperCaseStringMethodName: UpperCaseString

    2. Ergebnis: StringToReverseResult: StringToReverse

    3. Parameter: Erstellen Sie einen neuen Parameter mit einem Richtung von In, eine Typ -Zeichenfolge, und ein Wert stringtoupper.Parameters: Create a new parameter with a Direction of In, a Type of String, and a Value of StringToUpper.

    4. TargetType: NestedServices.StringLibraryTargetType: NestedServices.StringLibrary

  8. Nun wird der erste Dienst für die geänderte Zeichenfolge aufgerufen.We’ll now call the first service on the modified string. Mit der rechten Maustaste des Projekts, und wählen Sie Hinzufügen eines Dienstverweises.Right-click the project and select Add Service Reference. Hinzufügen eines Dienstverweises an den Dienst unter http://localhost/NestedServices/StringReverserService.xamlx und erstellen Sie das Projekt, um eine benutzerdefinierte Aktivität für den Zugriff auf den ersten Webdienst zu erstellen.Add a service reference to the service at http://localhost/NestedServices/StringReverserService.xamlx and build the project to create a custom activity to access the first Web service.

  9. Ziehen Sie eine Instanz der neuen Aktivität den Workflow zwischen den InvokeMethod Aktivität und die SendReplyToReceive Aktivitäten.Drag an instance of the new activity onto the workflow, between the InvokeMethod activity and the SendReplyToReceive activities. Weisen Sie der InputString-Eigenschaft der neuen Aktivität die StringToReverse-Variable zu, und weisen Sie der StringToReturn-Eigenschaft die StringToReturn-Variable zu.Assign the variable StringToReverse to the InputString property of the new activity, and the variable StringToReturn to the StringToReturn property.

  10. Öffnen Sie die Eigenschaftenseite des NestedServices-Projekts, und Ändern der bestimmte Seite in der Web Registerkarte in UpperCaserService.xamlx.Open the Properties page for the NestedServices project, and change the Specific Page in the Web tab to UpperCaserService.xamlx.

  11. Testen Sie den Dienst durch Drücken von F5.Test the service by pressing F5. Doppelklicken Sie im angezeigten WCF-Testclient auf die ReverseString()-Methode.In the WCF Test Client that appears, double-click the ReverseString() method. Geben Sie im Bereich Anforderung Sample für den Wert der InputString-Parameter.In the Request pane, enter Sample for the Value of the InputString parameter. Klicken Sie auf Aufrufen.Click Invoke. Die Rückgabe des Diensts sollte "ELPMAS" lauten.The service should return "ELPMAS".

So erstellen Sie einen Client, der die Dienste aufruftTo create a client to call the services

  1. Fügen Sie der Projektmappe ein neues Konsolenanwendungsprojekt mit dem Namen Client hinzu.Add a new Console application project called Client to the solution.

  2. Maustaste auf das Clientprojekt, und wählen Sie Hinzufügen eines Dienstverweises.Right-click the Client project and select Add Service Reference. Klicken Sie im Fenster, das angezeigt wird, auf Discover.In the window that appears, click Discover. Wählen Sie StringReverserService.xamlx aus, und geben Sie ReverseService als Namespace an.Select StringReverserService.xamlx, and enter ReverseService as the namespace. Klicken Sie auf OK.Click OK.

  3. Ersetzen Sie die Main-Methode in der Datei Program.cs durch den folgenden Code:Replace the Main method in Program.cs with the following code.

    static void Main(string[] args)  
    {  
        Console.Write("Input string to process:");  
        String input = Console.ReadLine();  
        var service = new ReverseService.ReverseStringClient();  
        Console.WriteLine("Output from service: {0}", service.ReverseString(input));  
        Console.ReadKey();  
    }