次の方法で共有


型指定のない要求/応答

Download sample

このサンプルは、Message クラスを使用する操作コントラクトを定義する方法を示します。

Noteメモ :

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

このサンプルは、「入門サンプル」に基づいています。サービス コントラクトは、メッセージの種類を引数として取得してメッセージを返すという 1 つの操作を定義します。この操作は、合計の計算に必要なすべてのデータをメッセージ本文から収集し、その合計を返信メッセージの本文に格納して返送します。

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

サービスでは、操作によって入力メッセージ内で渡された整数の配列が取得され、その合計が計算されます。応答メッセージの送信では、サンプルは適切なメッセージ バージョンと Action を含む新しいメッセージを作成し、計算された合計をメッセージ本文に追加します。これを実行するサンプル コードを次に示します。

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) によって生成されるコードを使用して、リモート サービスにプロキシを作成します。要求メッセージを送信するには、クライアントにメッセージ バージョンが存在する必要があります。これは基になるチャネルによって異なります。したがって、クライアントは、作成済みのプロキシ チャネルに適用される新しい OperationContextScope を作成し、これが、OutgoingMessageHeaders.MessageVersion プロパティで設定されている正しいメッセージ バージョンにより、OperationContext を作成します。クライアントは入力配列を本文として要求メッセージに渡し、プロキシの 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 サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.