Nicht typisierte Anforderung/AntwortUntyped Request/Reply

In diesem Beispiel wird das Definieren von Vorgangsverträgen veranschaulicht, die die Message-Klasse verwenden.This sample demonstrates how to define operation contracts that use the Message class.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Dieses Beispiel basiert auf der Einstieg.This sample is based on the Getting Started. Der Dienstvertrag definiert einen Vorgang, der einen Nachrichtentyp als Argument annimmt und eine Nachricht zurückgibt.The service contract defines one operation that takes in a message type as an argument and returns a message. Der Vorgang erfasst alle erforderlichen Daten zum Berechnen der Summe aus dem Nachrichtentext und sendet die Summe dann als Nachrichtentext in der Rückgabeantwort.The operation collects all required data to compute the sum from the message body and then sends the sum as body in the return message.

[OperationContract(Action = CalculatorService.RequestAction, ReplyAction = CalculatorService.ReplyAction)]  
Message ComputeSum(Message request);  

Im Dienst ruft der Vorgang das Array von ganzen Zahlen ab, das in der Eingabenachricht übergeben wurde, und berechnet dann die Summe.On the service, the operation retrieves the array of integers passed in the input message and then computes the sum. Zum Senden einer Antwortnachricht wird im Beispiel eine neue Nachricht mit der entsprechenden Nachrichtenversion und Aktion erstellt, und die berechnete Summe wird als Nachrichtentext hinzugefügt.To send a response message, the sample creates a new message with the appropriate message version and Action and adds the computed sum as its body. Dies wird im folgenden Beispielcode veranschaulicht.The following sample code demonstrates this.

public Message ComputeSum(Message request)  
{  
    //The body of the message contains a list of numbers which will be   
    //read as a int[] using GetBody<T>  
    int result = 0;  

    int[] inputs = request.GetBody<int[]>();  
    foreach (int i in inputs)  
    {  
        result += i;  
    }  

    Message response = Message.CreateMessage(request.Version,   
                                      ReplyAction, result);  
    return response;  
}  

Der Client verwendet, die vom generierten Code ServiceModel Metadata Utility Tool (Svcutil.exe) So erstellen Sie einen Proxy an den Remotedienst.The client uses code that is generated by ServiceModel Metadata Utility Tool (Svcutil.exe) to create a proxy to the remote service. Zum Senden einer Anforderungsnachricht muss der Client über die Nachrichtenversion verfügen, die vom zugrunde liegenden Kanal abhängig ist.To send a request message, the client must have the message version, which depends on the underlying channel. Daher wird ein neuer OperationContextScope erstellt, der auf den erstellten Proxykanal festgelegt ist. Dieser erstellt einen OperationContext, bei dem die richtige Nachrichtenversion in der OutgoingMessageHeaders.MessageVersion-Eigenschaft angegeben ist.Thus, it creates a new OperationContextScope scoped to the proxy channel it created, which creates an OperationContext with the correct message version populated in its OutgoingMessageHeaders.MessageVersion property. Der Client übergibt ein Eingabearray als Nachrichtentext an die Anforderungsnachricht und ruft dann ComputeSum beim Proxy auf.The client passes an input array as the body to the request message and then invokes the ComputeSum on the proxy. Der Client ruft dann die Summe der übergebenen Eingaben ab, indem auf die GetBody<T>-Methode der Antwortnachricht zugegriffen wird.The client then retrieves the sum of the inputs it passed by accessing the GetBody<T> method on the reply message. Dies wird im folgenden Beispielcode veranschaulicht.The following sample code demonstrates this.

using (new OperationContextScope(client.InnerChannel))  
{  
    // Call the Sum service operation.  
    int[] values = { 1, 2, 3, 4, 5 };  
    Message request = Message.CreateMessage(  
        OperationContext.Current.OutgoingMessageHeaders.MessageVersion,   
        RequestAction, values);  
    Message reply = client.ComputeSum(request);  
    int response = reply.GetBody<int>();  

    Console.WriteLine("Sum of numbers passed (1,2,3,4,5) = {0}",   
                                                       response);  
}  

Dieses Beispiel ist ein im Web gehostetes Beispiel. Es muss daher nur die ausführbare Datei für den Client ausgeführt werden.This sample is a Web-hosted sample and so only the client executable must be run. Im Folgenden finden Sie die Beispielausgabe auf dem Client.The following is the sample output on the client.

Prompt>Client.exe  
Sum of numbers passed (1,2,3,4,5) = 15  

Press <ENTER> to terminate client.  

Dieses Beispiel ist ein im Web gehostetes Beispiel. Überprüfen Sie daher den Link in Schritt 3, um Informationen zum Erstellen und Ausführen des Beispiels zu erhalten.This sample is a Web-hosted sample and so check the link provided in step 3 to see how to build and run the sample.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Message\Untyped

Siehe auchSee Also