Share via


メタデータ公開動作

Download sample

メタデータ公開動作のサンプルでは、サービスのメタデータ公開機能を制御する方法を示します。潜在的に機密性のあるサービス メタデータの意図しない漏えいを回避するため、Windows Communication Foundation (WCF) サービスの既定の構成では、メタデータの公開は無効になっています。この動作は既定ではセキュリティ保護されていますが、同時に、サービスのメタデータ公開の動作が構成で明示的に有効にならない限り、メタデータ インポート ツール (Svcutil.exe など) を使用して、サービスの呼び出しに必要なクライアント コードを生成できないことも意味します。

Note メモ :

このサンプルではわかりやすくするために、セキュリティで保護されていないメタデータ公開エンドポイントを作成する方法を示します。こうしたエンドポイントは、認証されていない匿名の利用者が利用できる可能性があります。これらのエンドポイントを配置する前には注意を払い、サービスのメタデータをパブリックに公開することが適切かどうか確認する必要があります。メタデータ エンドポイントをセキュリティ保護するサンプルについては、「カスタム セキュア メタデータ エンドポイント」のサンプルを参照してください。

このサンプルは、ICalculator サービス コントラクトを実装する「入門サンプル」に基づいています。この例では、クライアントはコンソール アプリケーション (.exe) で、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。

Noteメモ :

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

サービスでメタデータを公開するには、サービス上に ServiceMetadataBehavior を構成する必要があります。この動作が存在する場合は、エンドポイントを構成してメタデータを公開し、IMetadataExchange コントラクトを WS-MetadataExchange (MEX) プロトコルの実装として公開できます。便宜上、このコントラクトには、構成名を略した "IMetadataExchange" という名前が付けられています。このサンプルでは、mexHttpBinding を使用します。これは使いやすい標準バインディングで、セキュリティ モードが None に設定されている wsHttpBinding と同等です。エンドポイントには、相対アドレスの "mex" が使用されています。このアドレスがサービスのベース アドレスに対して解決されると、エンドポイントのアドレスは https://localhost/servicemodelsamples/service.svc/mex になります。この動作の構成を次に示します。

  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <!-- The serviceMetadata behavior publishes metadata through 
             the IMetadataExchange contract. When this behavior is 
             present, you can expose this contract through an endpoint 
             as shown below. Setting httpGetEnabled to true publishes 
             the service's WSDL at the <baseaddress>?wsdl, for example,
             https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

MEX エンドポイントを次に示します。

      <!-- the MEX endpoint is exposed at 
           https://localhost/servicemodelsamples/service.svc/mex 
           To expose the IMetadataExchange contract, you 
           must enable the serviceMetadata behavior as demonstrated                         
           previously. -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />

このサンプルでは、HttpGetEnabled プロパティを true に設定します。これにより、HTTP GET を使用してサービスのメタデータも公開されます。HTTP GET メタデータのエンドポイントを有効にするには、サービスに HTTP ベース アドレスが設定されている必要があります。クエリ文字列 ?wsdl は、メタデータにアクセスするサービスのベース アドレスで使用されます。たとえば、Web ブラウザでサービスの WSDL を表示するには、アドレス https://localhost/servicemodelsamples/service.svc?wsdl を使用します。または、HttpsGetEnabledtrue に設定してこの動作を使用することにより、HTTPS を通じてメタデータを公開することもできます。これには、HTTPS ベース アドレスが必要です。

サービスの MEX エンドポイントにアクセスするには、Service Model Metadata Utility Tool (Svcutil.exe) を使用します。

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

これにより、サービスのメタデータに基づくクライアントが生成されます。

HTTP GET を使用してサービスのメタデータにアクセスするには、ブラウザで https://localhost/servicemodelsamples/service.svc?wsdl を指定します。

この動作を削除してサービスを開こうとすると、例外が発生します。動作がない場合にこのエラーが発生するのは、IMetadataExchange コントラクトを使用して構成されたエンドポイントに実装が存在しないからです。

HttpGetEnabledfalse に設定すると、サービスのメタデータが表示される代わりに CalculatorService ヘルプ ページが表示されます。

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

  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.