Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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.
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.
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.