不具型別的要求/回覆
這個範例會示範如何定義使用 Message 類別的作業合約。
注意: |
---|
此範例的安裝程序與建置指示位於本主題的結尾。 |
此範例是以使用者入門範例為基礎。此服務合約會定義將訊息類型當做引數接受並傳回訊息的作業。此作業會收集所有必要資料來計算訊息本文的總和,然後將該總和當做傳回訊息中的本文加以傳送。
[OperationContract(Action = CalculatorService.RequestAction, ReplyAction = CalculatorService.ReplyAction)]
Message ComputeSum(Message request);
在進行此服務時,該作業會擷取輸入訊息中所傳遞之整數的陣列,然後計算出總和。為了傳送回應訊息,此範例會建立包含適當的訊息版本和動作的新訊息,並將計算得到的總和當做本文加入至該訊息。下列範例程式碼示範這項功能。
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;
}
用戶端會使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 產生的程式碼來建立遠端服務的 Proxy。為了傳送要求訊息,用戶端必須具備依基礎通道而定的訊息版本。如此一來,它會建立範圍限定在其所建立之 Proxy 通道的新 OperationContextScope,而此新範圍會依據其 OutgoingMessageHeaders.MessageVersion
屬性中所填入之正確訊息版本來建立 OperationContext。用戶端會將輸入陣列當做本文傳遞到要求訊息,然後叫用 Proxy 上的 ComputeSum
。接著,用戶端會藉由存取回覆訊息的 GetBody<T>
方法,擷取其所傳遞的輸入總和。下列範例程式碼示範這項功能。
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);
}
這個範例是 Web 主控的範例,所以只需要執行用戶端可執行檔。下列是用戶端的輸出範例。
Prompt>Client.exe
Sum of numbers passed (1,2,3,4,5) = 15
Press <ENTER> to terminate client.
這個範例是 Web 主控的範例,所以請檢查步驟 3 提供的連結以得知如何建置與執行範例。
若要設定、建置及執行範例
若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。
若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.