Otypad begäran/svar

Det otypade exemplet visar hur du definierar åtgärdskontrakt som använder klassen Meddelande.

Anmärkning

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Det här exemplet baseras på Komma igång. Tjänstkontraktet definierar en åtgärd som tar in en meddelandetyp som ett argument och returnerar ett meddelande. Åtgärden samlar in alla data som krävs för att beräkna summan från meddelandetexten och skickar sedan summan som brödtext i returmeddelandet.

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

I tjänsten hämtar åtgärden matrisen med heltal som skickas i indatameddelandet och beräknar sedan summan. För att skicka ett svarsmeddelande skapar exemplet ett nytt meddelande med rätt meddelandeversion och Åtgärd och lägger till den beräknade summan som brödtext. Följande exempelkod visar detta.

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;
}

Klienten använder kod som genereras av ServiceModel Metadata Utility Tool (Svcutil.exe) för att skapa en proxy till fjärrtjänsten. Om du vill skicka ett begärandemeddelande måste klienten ha meddelandeversionen, som är beroende av den underliggande kanalen. Därför skapar den en ny OperationContextScope avgränsning för den skapade proxykanalen, vilket skapar en OperationContext med rätt meddelandeversion som fylls i dess OutgoingMessageHeaders.MessageVersion egenskap. Klienten skickar en indatamatris som brödtext till begärandemeddelandet och anropar ComputeSum sedan på proxyn. Klienten hämtar sedan summan av de indata som skickades genom att komma åt metoden GetBody<T> i svarsmeddelandet. Följande exempelkod visar detta.

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);
}

Det här exemplet är ett webbhostat exempel, så endast klientprogrammet måste köras. Följande är exempelutdata på klienten.

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

Press <ENTER> to terminate client.

Det här exemplet är ett webbhanterat exempel och kontrollera därför länken i steg 3 för att se hur du skapar och kör exemplet.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.