Procédure : utiliser MetadataExchangeClient pour récupérer des métadonnées
Utilisez la classe MetadataExchangeClient pour télécharger les métadonnées à l'aide du protocole WS-MetadataExchange (MEX). Les fichiers de métadonnées récupérés sont retournés sous forme d'objet MetadataSet. L'objet MetadataSet retourné contient une collection d'objets MetadataSection, chacun d'eux contenant un dialecte de métadonnées spécifique ainsi qu'un identificateur. Vous pouvez inscrire les métadonnées retournées dans des fichiers. Si ces métadonnées contiennent des documents WSDL (Web Services Description Language), vous pouvez également les importer à l'aide de WsdlImporter.
Les constructeurs MetadataExchangeClient qui acceptent une adresse utilisent la liaison de la classe statique MetadataExchangeBindings correspondant au modèle URI de cette adresse. Vous pouvez également utiliser le constructeur MetadataExchangeClient permettant de spécifier de manière explicite la liaison à utiliser. La liaison spécifiée est utilisée pour résoudre toutes les références de métadonnées.
Comme tout client Windows Communication Foundation (WCF), le type MetadataExchangeClient fournit un constructeur qui permet de charger les configurations de point de terminaison de client en utilisant leur nom. La configuration de point de terminaison indiquée doit spécifier le contrat IMetadataExchange. L'adresse de la configuration de point de terminaison n'est pas chargée, vous devez donc utiliser l'une des surcharges GetMetadata acceptant une adresse. Lorsque vous spécifiez l'adresse des métadonnées à l'aide d'une instance EndpointAddress, le client MetadataExchangeClient part du principe que cette adresse renvoie à un point de terminaison MEX. Si vous utilisez une adresse URL pour définir l'adresse des métadonnées, vous devez également spécifié le client MetadataExchangeClientMode à utiliser, à savoir MEX ou HTTP GET.
Important
Par défaut, le client MetadataExchangeClient résout toutes les références, notamment les inclusions et importations de schémas WSDL et XML. Vous pouvez désactiver cette fonctionnalité en affectant à la propriété ResolveMetadataReferences la valeur false
. Vous pouvez contrôler le nombre maximal de références à résoudre à l'aide de la propriété MaximumResolvedReferences. Vous pouvez utiliser cette propriété en parallèle avec la propriété MaxReceivedMessageSize
sur la liaison pour contrôler la quantité de métadonnées à récupérer.
Pour utiliser MetadataExchangeClient afin de récupérer des métadonnées
Créez un objet MetadataExchangeClient en spécifiant explicitement une liaison, le nom de la configuration du point de terminaison ou l’adresse des métadonnées.
Configurez le client MetadataExchangeClient en fonction de vos besoins. Par exemple, vous pouvez spécifier les informations d'identification à utiliser lors de la demande de métadonnées, les modalités de résolution des références de métadonnées ainsi que la propriété OperationTimeout pour définir le délai au terme duquel la demande de métadonnées expire.
Récupérez l'objet MetadataSet qui contient les métadonnées récupérées en appelant l'une des méthodes GetMetadata. Remarque : vous pouvez utiliser uniquement la surcharge GetMetadata n’acceptant pas d’arguments si vous avez spécifié une adresse de manière explicite pendant la construction de MetadataExchangeClient.
Exemple
L'exemple de code suivant indique comment utiliser MetadataExchangeClient pour télécharger et énumérer des fichiers de métadonnées.
// Get metadata documents.
Console.WriteLine("URI of the metadata documents retrieved:");
MetadataExchangeClient metaTransfer
= new MetadataExchangeClient(httpGetMetaAddress.Uri, MetadataExchangeClientMode.HttpGet);
metaTransfer.ResolveMetadataReferences = true;
MetadataSet otherDocs = metaTransfer.GetMetadata();
foreach (MetadataSection doc in otherDocs.MetadataSections)
Console.WriteLine(doc.Dialect + " : " + doc.Identifier);
Compilation du code
Pour compiler cet exemple de code, vous devez référencer l'assembly System.ServiceModel.dll et importer l'espace de noms System.ServiceModel.Description.