<serviceMetadata>

サービス メタデータと関連情報の公開を指定します。

スキーマの階層

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <serviceBehaviors> の <behavior>
        <serviceMetadata>

構文

<serviceMetadata 
    externalMetadataLocation="String"
    httpGetBinding=”String”    httpGetBindingConfiguration=”String”
    httpGetEnabled="Boolean" 
    httpGetUrl="String"
    httpsGetBinding=”String”    httpsGetBindingConfiguration=”String”
    httpsGetEnabled="Boolean" 
    httpsGetUrl="String"
    policyVersion="Policy12/Policy15"/>

属性と要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明

externalMetadataLocation

WSDL ファイルの位置を含む URI。これは、自動生成される WSDL の代わりに、WSDL 要求および MEX 要求に応答してユーザーに返されます。この属性が設定されていない場合は、既定の WSDL が返されます。既定値は空の文字列です。

httpGetBinding

HTTP GET 経由でメタデータを取得する場合に使用するバインディングの種類を指定する文字列。この設定は省略可能です。指定しない場合、既定のバインディングが使用されます。

T:System.ServiceModel.Channels.IReplyChannel をサポートする内部バインディング要素を使用したバインディングでのみサポートされます。また、バインディングの P:System.ServiceModel.Channels.MessageVersion プロパティは P:System.ServiceModel.Channels.MessageVersion.None にする必要があります。

httpGetBindingConfiguration

このバインディングの追加の構成情報を参照する httpGetBinding 属性に指定されるバインディングの名前を設定する文字列。同じ名前を <bindings> セクションに定義する必要があります。

httpGetEnabled

HTTP/Get 要求を使用した取得用にサービス メタデータを公開するかどうかを指定するブール値。既定値は false です。

httpGetUrl 属性が指定されていない場合、メタデータが公開されるアドレスは、サービス アドレスに "?wsdl" を加えたものになります。たとえば、サービス アドレスが "https://localhost:8080/CalculatorService" の場合、HTTP/Get メタデータ アドレスは、"https://localhost:8080/CalculatorService?wsdl" になります。

このプロパティが false の場合またはサービスのアドレスが HTTP または HTTPS に基づいていない場合、"?wsdl" は無視されます。

httpGetUrl

HTTP/Get 要求を使用した取得用にメタデータが公開されるアドレスを指定する URI。

httpsGetBinding

HTTPS GET 経由でメタデータを取得する場合に使用するバインディングの種類を指定する文字列。この設定は省略可能です。指定しない場合、既定のバインディングが使用されます。

T:System.ServiceModel.Channels.IReplyChannel をサポートする内部バインディング要素を使用したバインディングでのみサポートされます。また、バインディングの P:System.ServiceModel.Channels.MessageVersion プロパティは P:System.ServiceModel.Channels.MessageVersion.None にする必要があります。

httpsGetBindingConfiguration

このバインディングの追加の構成情報を参照する httpsGetBinding 属性に指定されるバインディングの名前を設定する文字列。同じ名前を <bindings> セクションに定義する必要があります。

httpsGetEnabled

HTTPS/Get 要求を使用した取得用にサービス メタデータを公開するかどうかを指定するブール値。既定値は false です。

httpsGetUrl 属性が指定されていない場合、メタデータが公開されるアドレスは、サービス アドレスに "?wsdl" を加えたものになります。たとえば、サービス アドレスが "https://localhost:8080/CalculatorService" の場合、HTTP/Get メタデータ アドレスは、"https://localhost:8080/CalculatorService?wsdl" になります。

このプロパティが false の場合またはサービスのアドレスが HTTP または HTTPS に基づいていない場合、"?wsdl" は無視されます。

httpsGetUrl

HTTPS/Get 要求を使用した取得用にメタデータが公開されるアドレスを指定する URI。

policyVersion

使用する WS-Policy 仕様のバージョンを指定する文字列。この属性は PolicyVersion 型です。

子要素

なし

親要素

要素 説明

<endpointBehaviors> の <behavior>

動作の要素を指定します。

解説

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

この動作を構成する詳細なコード例については、「Metadata Publishing Behavior」を参照してください。

オプションの httpGetBinding 属性および httpsGetBinding 属性を使用すると、HTTP GET または HTTPS GET を介してメタデータを取得するバインディングを構成できます。これらの属性を指定しない場合、メタデータの取得には、適切な既定のバインディグ (HTTP の場合は HttpTransportBindingElement、HTTPS の場合は HttpsTransportBindingElement) が使用されます。これらの属性は、組み込みの WCF バインディングでは使用できないことに注意してください。IReplyChannel をサポートする内部バインディング要素を使用したバインディングでのみサポートされます。さらに、バインディングの MessageVersion プロパティが None である必要があります。

サービスが悪意のあるユーザーに公開されないようにするために、SSL over HTTP (HTTPS) 機構を使用して転送をセキュリティで保護できます。転送を保護するには、まず、サービスをホストしているコンピューターの特定のポートに適切な X.509 証明書をバインドする必要があります (詳細については、次のトピックを参照してください。 Working with Certificates.)次に、この要素をサービス構成に追加し、httpsGetEnabled 属性を true に設定します。最後に、次の例に示すように、httpsGetUrl 属性をサービス メタデータ エンドポイントの URL に設定します。

<behaviors>
 <serviceBehaviors>
  <behavior name="NewBehavior">
    <serviceMetadata httpsGetEnabled="true" 
     httpsGetUrl="https://myComputerName/myEndpoint" />
  </behavior>
 </serviceBehaviors>
</behaviors>

次の例では、<serviceMetadata> 要素を使用してメタデータを公開するサービスを構成します。さらに、IMetadataExchange コントラクトを WS-MetadataExchange (MEX) プロトコルの実装として公開するエンドポイントも構成します。この例では、mexHttpBinding を使用します。これは使いやすい標準バインドで、セキュリティ モードが None に設定されている wsHttpBinding と同等です。エンドポイントには、相対アドレスの "mex" が使用されています。このアドレスがサービスのベース アドレスに対して解決されると、エンドポイントのアドレスは https://localhost/servicemodelsamples/service.svc/mex になります。

<configuration>
<system.serviceModel>
  <services>
    <service 
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      <!-- This endpoint is exposed at the base address provided by the host: https://localhost/servicemodelsamples/service.svc  -->
      <endpoint address=""
                binding="wsHttpBinding"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
      <!-- 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 below -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
  <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 above. Setting httpGetEnabled to true publishes 
             the service's WSDL at the <baseaddress>?wsdl
             eg. https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

</system.serviceModel>

</configuration>

参照

リファレンス

ServiceMetadataPublishingElement
ServiceMetadataBehavior

その他のリソース

Security Behaviors in WCF
Metadata Publishing Behavior