次の方法で共有


方法 : メタデータの取得および準拠サービスの実装をする

サービスのデザイン担当者と実装担当者が同じであるとは限りません。アプリケーションの相互運用が重要な環境では、コントラクトを Web サービス記述言語 (WSDL) でデザインまたは記述した場合、開発者はそのコントラクトに準拠するサービスを実装する必要があります。既存のサービスを Windows Communication Foundation (WCF) に移行することもできますが、その物理メッセージ フォーマットを維持しなければなりません。さらに、双方向コントラクトでは、呼び出し元でコールバック コントラクトを実装する必要もあります。

このような場合は、ServiceModel Metadata Utility Tool (Svcutil.exe) (または同等のツール) を使用して、サービス コントラクト インターフェイスを実装可能なマネージ言語で生成し、コントラクトの要件を満たす必要があります。通常、ServiceModel Metadata Utility Tool (Svcutil.exe) を使用して、チャネル ファクトリまたは WCF クライアント型で使用されるサービス コントラクトや、正しいバインディングとアドレスを設定するクライアント構成ファイルで使用されるサービス コントラクトを取得します。生成された構成ファイルを使用するには、それをサービスの構成ファイルに変更する必要があります。また、サービス コントラクトを変更する必要もあります。

データを取得して準拠サービスを実装するには

  1. メタデータ ファイルまたはメタデータのエンドポイントに対して ServiceModel Metadata Utility Tool (Svcutil.exe) を使用してコード ファイルを生成します。

  2. 出力コード ファイルを検索し、System.ServiceModel.ServiceContractAttribute 属性でマークされた対象のインターフェイス (複数ある場合) 部分を見つけます。次のコード例は、ServiceModel Metadata Utility Tool (Svcutil.exe) で生成された 2 つのインターフェイスを示しています。最初の例 (ISampleService) は、準拠サービスを作成するために実装するサービス コントラクト インターフェイスです。2 番目の例 (ISampleServiceChannel) は、サービス コントラクト インターフェイスと System.ServiceModel.IClientChannel の両方を拡張するクライアント用のヘルパー インターフェイスです。これはクライアント アプリケーションでも使用されます。

  3. すべての操作に対する応答アクションを WSDL で指定していない場合、生成後の操作コントラクトでは、ReplyAction プロパティがワイルドカード文字 (*) に設定される場合があります。このプロパティの設定を削除します。削除しない場合は、サービス コントラクト メタデータを実装するときに、それらの操作のメタデータをエクスポートできません。

  4. クラスにインターフェイスを実装してサービスをホストします。例については、「方法 : Windows Communication Foundation サービス コントラクトを実装する」を参照するか、以下の「使用例」にある簡単な実装を参照してください。

  5. ServiceModel Metadata Utility Tool (Svcutil.exe) によって生成されたクライアント構成ファイルで、<client> 構成セクションを <services> 構成セクションに変更します (生成されたクライアント アプリケーション構成ファイルの例については、次の例を参照してください)。

  6. <services> 構成セクション内で、name 属性をユーザーのサービス実装の<services> 構成セクションに作成します。

  7. サービスの name 属性をユーザーのサービス実装の構成名に設定します。

  8. 実装するサービス コントラクトを使用するエンドポイント構成要素をサービス構成セクションに追加します。

次のコード例には、メタデータ ファイルに対して ServiceModel Metadata Utility Tool (Svcutil.exe) を実行して生成されたコード ファイルの大部分が示されています。

このコードには、次の項目が示されています。

  • コントラクトの要件に準拠するサービス コントラクト インターフェイス (実装する場合) (ISampleService)。
  • サービス コントラクト インターフェイスと System.ServiceModel.IClientChannel の両方を拡張するクライアント用のヘルパー インターフェイス。これはクライアント アプリケーションでも使用されます(ISampleServiceChannel)。
  • System.ServiceModel.ClientBase を拡張するヘルパー クラス。クライアント アプリケーションで使用されます。(SampleServiceClient)
  • サービスから生成された構成ファイル。
  • ISampleService サービスの簡単な実装。
  • クライアント側の構成ファイルからサービス側バージョンへの変換。

関連項目

その他の技術情報

ServiceModel Metadata Utility Tool (Svcutil.exe)