このサンプルでは、任意の SOAP アクションでメッセージ オブジェクトを受け入れるサービスを実装する方法を示します。このサンプルは、電卓サービスを実装する「入門サンプル」に基づいています。このサービスは、Message 要求パラメータを受け入れる 1 つの Calculate 操作を実装して、Message 応答を返します。
このサンプルでは、クライアントはコンソール アプリケーション (.exe) で、サービスは IIS によってホストされています。
注 : |
|---|
| このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
このサンプルでは、本文の内容に基づくメッセージ ディスパッチを示します。組み込みの Windows Communication Foundation (WCF) サービス モデルのメッセージ ディスパッチ メカニズムは、メッセージの Action に基づいています。ただし既存の多くの Web サービスでは、すべての操作が Action="" で定義されています。アクション情報に基づいてディスパッチ要求メッセージを保持する 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 に対して、複数の操作間でメッセージをディスパッチするように要求します。このディスパッチ動作は、カスタムの DispatchByBodyElementOperationSelector 操作セレクタを、それぞれのラッパー要素の QName をキーとする操作名のテーブルを使用して初期化します。DispatchByBodyElementOperationSelector は本文の最初の子の開始タグを参照し、前述のテーブルを使用して操作を選択します。
クライアントは、ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用するサービスによってエクスポートされた WSDL から自動生成された、プロキシを使用します。
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs https://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.
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。
注 : |
|---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<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\Extensibility\Interop\RouteByBody
|
注 :
注 :