不具型別的要求/回覆

這個範例會示範如何定義使用 Message 類別的作業合約。

Aa717038.note(zh-tw,VS.90).gif注意:
此範例的安裝程序與建置指示位於本主題的結尾。

此範例是以使用者入門範例為基礎。此服務合約會定義將訊息類型當做引數接受並傳回訊息的作業。此作業會收集所有必要資料來計算訊息本文的總和,然後將該總和當做傳回訊息中的本文加以傳送。

[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 提供的連結以得知如何建置與執行範例。

若要設定、建置及執行範例

  1. 請確定您已執行 Windows Communication Foundation 範例的單次安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。

  3. 若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.