次の方法で共有


本文別のルーティング

RouteByBody サンプルでは、SOAP アクションを使用してメッセージ オブジェクトを受け入れるサービスを実装する方法を示します。 このサンプルは、電卓サービスを実装する 作業の開始 に基づいています。 サービスは、Calculate要求パラメーターを受け取り、Message応答を返す 1 つのMessage操作を実装します。

このサンプルでは、クライアントはコンソール アプリケーション (.exe) であり、サービスは IIS でホストされています。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

このサンプルでは、本文の内容に基づくメッセージディスパッチを示します。 組み込みの Windows Communication Foundation (WCF) サービス モデルのメッセージ ディスパッチ メカニズムは、メッセージ アクションに基づいています。 ただし、Action="" を使用してすべての操作を定義する既存の Web サービスは多数あります。 アクション情報に基づいて要求メッセージをディスパッチし続ける WSDL に基づくサービスを構築することはできません。 このサンプルでは、WSDL に基づくサービス コントラクトを示します (WSDL はサンプルに含まれる Service.wsdl に含まれています)。 このサービス コンストラクトは、「入門サンプル」で使用されているものと同様の電卓です。 ただし、 [OperationContract] は、すべての操作の Action="" を指定します。

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),
                 XmlSerializerFormat, DispatchByBodyBehavior]
    public interface ICalculator
    {
        [OperationContract(Action="")]
        double Add(double n1, double n2);
        [OperationContract(Action = "")]
        double Subtract(double n1, double n2);
        [OperationContract(Action = "")]
        double Multiply(double n1, double n2);
        [OperationContract(Action = "")]
        double Divide(double n1, double n2);
    }

コントラクトを指定すると、サービスでは、操作間でメッセージをディスパッチできるようにするために、カスタム ディスパッチ動作 DispatchByBodyBehavior が必要です。 このディスパッチ動作は、各ラッパー要素の QName でキー指定された操作名のテーブルを使用して、 DispatchByBodyElementOperationSelector カスタム操作セレクターを初期化します。 DispatchByBodyElementOperationSelector は、Body の最初の子の開始タグを確認し、前述の表を使用して操作を選択します。

クライアントは、 ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用して、サービスによってエクスポートされた WSDL から自動生成されたプロキシを使用します。

svcutil.exe  /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs

すべての操作のアクションが空であるという事実は、自動生成されたプロキシの Action パラメーターを除き、クライアント コードには影響しません。

クライアント コードは、いくつかの計算を実行します。 サンプルを実行すると、操作要求と応答がクライアント コンソール ウィンドウに表示されます。 クライアント ウィンドウで Enter キーを押して、クライアントをシャットダウンします。

Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714

Press <ENTER> to terminate client.

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

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

  3. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。