次の方法で共有


型指定のない要求/応答

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

Aa717038.note(ja-jp,VS.100).gif注 :
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

このサンプルは、「入門サンプル」に基づいています。サービス コントラクトは、メッセージの種類を引数として取得してメッセージを返すという 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 メタデータ ユーティリティ ツール (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. 単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。

Aa717038.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Message\Untyped