Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple de métadonnées montre comment contrôler les fonctionnalités de publication de métadonnées d’un service. Pour empêcher la divulgation involontaire de métadonnées de service potentiellement sensibles, la configuration par défaut pour les services Windows Communication Foundation (WCF) désactive la publication de métadonnées. Ce comportement est sécurisé par défaut, mais signifie également que vous ne pouvez pas utiliser un outil d’importation de métadonnées (tel que Svcutil.exe) pour générer le code client requis pour appeler le service, sauf si le comportement de publication des métadonnées du service est explicitement activé dans la configuration.
Importante
Pour plus de clarté, cet exemple montre comment créer un point de terminaison de publication de métadonnées non sécurisé. Ces points de terminaison sont potentiellement disponibles pour les consommateurs non authentifiés anonymes et les précautions doivent être prises avant de déployer ces points de terminaison pour s’assurer que la divulgation publique des métadonnées d’un service est appropriée. Consultez l’exemple de point de terminaison de métadonnées sécurisés personnalisé pour un exemple qui sécurise un point de terminaison de métadonnées.
L’exemple est basé sur Getting Started, qui implémente le contrat de service ICalculator. Dans cet exemple, le client est une application console (.exe) et le service est hébergé par les services IIS (Internet Information Services).
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
Pour qu'un service puisse exposer des métadonnées, ServiceMetadataBehavior doit être configuré sur le service. Lorsque ce comportement est présent, vous pouvez publier des métadonnées en configurant un point de terminaison pour exposer le IMetadataExchange contrat en tant qu’implémentation d’un protocole WS-MetadataExchange (MEX). Par commodité, ce contrat a reçu le nom de configuration abrégé « IMetadataExchange ». Cet exemple utilise la mexHttpBinding, qui est une norme de liaison pratique équivalente à la wsHttpBinding, avec le mode de sécurité défini sur None. Une adresse relative de « mex » est utilisée dans le point de terminaison, qui, lorsqu’elle est résolue par rapport à l’adresse de base des services, génère une adresse de point de terminaison de http://localhost/servicemodelsamples/service.svc/mex. Voici la configuration du comportement :
<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,
http://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
Le point de terminaison MEX se présente comme suit :
<!-- the MEX endpoint is exposed at
http://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" />
Cet exemple définit la propriété HttpGetEnabled sur true, ce qui expose également les métadonnées du service via HTTP GET. Pour activer un point de terminaison de métadonnées HTTP GET, le service doit avoir une adresse de base HTTP. La chaîne ?wsdl de requête est utilisée sur l’adresse de base du service pour accéder aux métadonnées. Par exemple, pour afficher le WSDL pour le service dans un navigateur Web, vous utiliseriez l’adresse http://localhost/servicemodelsamples/service.svc?wsdl. Vous pouvez également utiliser ce comportement pour exposer les métadonnées sur HTTPS en définissant HttpsGetEnabled sur true. Cela nécessite une adresse de base HTTPS.
Pour accéder au point de terminaison MEX du service, utilisez l’outil Utilitaire de métadonnées ServiceModel (Svcutil.exe).
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Cela génère un client en fonction des métadonnées du service.
Pour accéder aux métadonnées du service à l’aide de HTTP GET, pointez votre navigateur vers http://localhost/servicemodelsamples/service.svc?wsdl.
Si vous supprimez ce comportement et essayez d’ouvrir le service, vous obtenez une exception. Cette erreur se produit car sans le comportement, le point de terminaison configuré avec le IMetadataExchange contrat n’a pas d’implémentation.
Si vous définissez HttpGetEnabled sur false, vous voyez la page d'aide de CalculatorService au lieu des métadonnées du service.
Pour configurer, générer et exécuter l’exemple
Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.