Partager via


<serviceMetadata>

Spécifie la publication de métadonnées de service et des informations associées.

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

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

Attributs et éléments

Attributs

Attribut Description

externalMetadataLocation

Uri contenant l'emplacement d'un fichier WSDL renvoyé à l'utilisateur en réponse aux demandes WSDL et MEX au lieu du WSDL généré automatiquement. Lorsque cet attribut n'est pas défini, le WSDL par défaut est renvoyé. La valeur par défaut est une chaîne vide.

httpGetBinding

Valeur de chaîne qui permet de spécifier la liaison à utiliser dans les scénarios HTTP GET par nom.

httpGetEnabled

Valeur booléenne indiquant si les métadonnées de service correspondant à la récupération doivent être publiées à l'aide d'une demande HTTP/Get. La valeur par défaut est false.

Si l'attribut httpGetUrl n'est pas spécifié, l'adresse utilisée pour publier les métadonnées est celle du service à laquelle est ajouté le suffixe « ? wsdl ». Par exemple, si l'adresse de service est « https://localhost:8080/CalculatorService », l'adresse HTTP/Get est « https://localhost:8080/CalculatorService? wsdl ».

Si cette propriété a la valeur false ou si l'adresse du service n'est pas basée sur le protocole HTTP ou HTTPS, le suffixe « ? wsdl » n'est pas pris en compte.

httpGetUrl

Uri indiquant l'adresse utilisée pour publier les métadonnées correspondant à la récupération à l'aide d'une demande HTTP/Get.

httpsGetBinding

Valeur de chaîne qui permet de spécifier la liaison à utiliser dans les scénarios HTTPS GET par nom.

httpsGetEnabled

Valeur booléenne indiquant si les métadonnées de service correspondant à la récupération doivent être publiées à l'aide d'une demande HTTPS/Get. La valeur par défaut est false.

Si l'attribut httpsGetUrl n'est pas spécifié, l'adresse utilisée pour publier les métadonnées est celle du service à laquelle est ajouté le suffixe « ? wsdl ». Par exemple, si l'adresse de service est « https://localhost:8080/CalculatorService », l'adresse HTTP/Get est « https://localhost:8080/CalculatorService? wsdl ».

Si cette propriété a la valeur false ou si l'adresse du service n'est pas basée sur le protocole HTTP ou HTTPS, le suffixe « ? wsdl » n'est pas pris en compte.

httpsGetUrl

Uri indiquant l'adresse utilisée pour publier les métadonnées afin d'effectuer une récupération à l'aide d'une demande HTTPS/Get.

policyVersion

Chaîne indiquant la version de la spécification WS-Policy qui est utilisée. Cet attribut est de type PolicyVersion.

Éléments enfants

Aucun

Éléments parents

Élément Description

<behavior> de <endpointBehaviors>

Spécifie un élément de comportement.

Notes

Cet élément de configuration permet de contrôler les métadonnées qui publient les fonctionnalités d'un service. Pour empêcher la divulgation involontaire de métadonnées de service potentiellement sensibles, la publication de métadonnées est désactivée par défaut dans la configuration des services Windows Communication Foundation (WCF). Ce comportement est sécurisé par défaut, mais il signifie également que vous ne pouvez pas utiliser d'outil d'importation de métadonnées (tel que Svcutil.exe) pour générer le code client requis pour appeler le service, à moins que le comportement de publication des métadonnées du service soit activé explicitement dans la configuration. À l'aide de cet élément de configuration, vous pouvez activer ce comportement de publication pour votre service.

Pour consulter un exemple de code détaillé configurant ce comportement, consultez Metadata Publishing Behavior.

Les attributs facultatifs httpGetBinding et httpsGetBinding vous permettent de configurer les liaisons utilisées pour la récupération de métadonnées via HTTP GET (ou HTTPS GET). S'ils ne sont pas spécifiés, les liaisons par défaut (HttpTransportBindingElement dans le cas de HTTP et HttpsTransportBindingElement dans le cas de HTTPS) sont utilisées pour la récupération des métadonnées. Notez que vous ne pouvez pas utiliser ces attributs avec les liaisons WCF intégrées. La prise en charge n'est assurée que pour les liaisons comportant des éléments de liaison internes qui prennent en charge System.ServiceModel.Channels.IReplyChannel. En outre, la propriété System.ServiceModel.Channels.MessageVersion de la liaison doit être System.ServiceModel.Channels.MessageVersion.None.

Pour éviter l'exposition d'un service aux utilisateurs malveillants, il est possible de sécuriser le transfert à l'aide du mécanisme HTTPS (SSL over HTTP). Pour ce faire, vous devez d'abord lier un certificat X.509 approprié à un port spécifique sur l'ordinateur qui héberge le service. (Pour plus d'informations, consultez Working with Certificates.) Ensuite, ajoutez cet élément à la configuration du service et affectez la valeur true à l'attribut httpsGetEnabled. Enfin, affectez l'URL du point de terminaison des métadonnées du service à l'attribut httpsGetUrl, comme indiqué dans l'exemple suivant.

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

Exemple

L'exemple suivant illustre la configuration d'un service pour exposer des métadonnées à l'aide de l'élément <serviceMetadata>. Il configure également un point de terminaison afin d'exposer le contrat IMetadataExchange comme implémentation d'un protocole WS-MetadataExchange (MEX). L'exemple utilise mexHttpBinding, qui est une liaison standard équivalente à wsHttpBinding dans laquelle le mode de sécurité a la valeur None. Une adresse relative de « mex » est utilisée dans le point de terminaison qui, s'il est résolu sur l'adresse des services de base a pour résultat l'adresse de point de terminaison 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>

Voir aussi

Référence

ServiceMetadataPublishingElement
ServiceMetadataBehavior

Autres ressources

Security Behaviors in WCF
Metadata Publishing Behavior