Nem beírt kérés/válasz

A nem beírt minta bemutatja, hogyan definiálhatók az üzenetosztályt használó műveleti szerződések.

Megjegyzés:

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

Ez a minta az első lépéseken alapul. A szolgáltatási szerződés egy olyan műveletet határoz meg, amely argumentumként egy üzenettípust vesz fel, és egy üzenetet ad vissza. A művelet összegyűjti az összes szükséges adatot az üzenettörzs összegének kiszámításához, majd az összeget törzsként küldi el a visszatérési üzenetben.

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

A szolgáltatásban a művelet lekéri a bemeneti üzenetben átadott egész számok tömbét, majd kiszámítja az összeget. Válaszüzenet küldéséhez a minta létrehoz egy új üzenetet a megfelelő üzenetverzióval és művelettel, és törzsként hozzáadja a kiszámított összeget. Ezt az alábbi mintakód szemlélteti.

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

Az ügyfél a ServiceModel Metadata Utility Tool (Svcutil.exe) által létrehozott kód használatával hoz létre proxyt a távoli szolgáltatáshoz. Kérésüzenet küldéséhez az ügyfélnek rendelkeznie kell az üzenet verziójával, amely az alapul szolgáló csatornától függ. Így létrehoz egy új OperationContextScope hatókört, amely a létrehozott proxycsatornához kapcsolódik, és ez létrehoz egy OperationContext-et, amelynek OutgoingMessageHeaders.MessageVersion tulajdonságában a megfelelő üzenetverzió szerepel. Az ügyfél tartalomként egy bemeneti tömböt ad át a kérelemüzenetnek, majd meghívja a ComputeSum a proxy szerveren. Az ügyfél ezután lekéri az átadott bemenetek összegét a GetBody<T> válaszüzenetben található metódus elérésével. Ezt az alábbi mintakód szemlélteti.

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

Ez a minta egy weben tárolt példa, ezért csak a kliens futtatható fájlt kell futtatni. Az alábbi mintakimenet az ügyfél oldalon.

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

Press <ENTER> to terminate client.

Ez a minta egy webalapú minta, ezért tekintse meg a 3. lépésben megadott hivatkozást a minta létrehozásához és futtatásához.

A példa beállítása, elkészítése és futtatása

  1. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.

  2. A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.

  3. Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.