Como: Usar MetadataExchangeClient para recuperar metadados
Use a MetadataExchangeClient classe para baixar metadados usando o protocolo WS-MetadataExchange (MEX). Os arquivos de metadados recuperados são retornados como um MetadataSet objeto. O objeto retornado MetadataSet contém uma coleção de MetadataSection objetos, cada um dos quais contém um dialeto de metadados específico e um identificador. Você pode gravar os metadados retornados em arquivos ou, se os metadados retornados contiverem documentos WSDL (Web Services Description Language), poderá importar os metadados usando o WsdlImporter.
Os MetadataExchangeClient construtores que usam um endereço usam a associação na MetadataExchangeBindings classe estática que corresponde ao esquema URI (Uniform Resource Identifier) do endereço. Como alternativa, você pode usar o MetadataExchangeClient construtor que permite especificar explicitamente a associação a ser usada. A associação especificada é usada para resolver todas as referências de metadados.
Assim como qualquer outro cliente Windows Communication Foundation (WCF), o MetadataExchangeClient tipo fornece um construtor para carregar configurações de ponto de extremidade do cliente usando o nome de configuração do ponto de extremidade. A configuração de ponto de extremidade especificada deve especificar o IMetadataExchange contrato. O endereço na configuração do ponto de extremidade não é carregado, portanto, você deve usar uma das GetMetadata sobrecargas que usam um endereço. Quando você especifica o endereço de metadados usando uma EndpointAddress instância, o MetadataExchangeClient pressupõe que o endereço aponta para um ponto de extremidade MEX. Se você especificar o endereço de metadados como uma URL, precisará especificar também qual MetadataExchangeClientMode usar, MEX ou HTTP GET.
Importante
Por padrão, o MetadataExchangeClient resolve todas as referências para você, incluindo importações WSDL e esquema XML e inclui. Você pode desativar essa funcionalidade definindo a ResolveMetadataReferences propriedade como false
. Você pode controlar o número máximo de referências a serem resolvidas usando a MaximumResolvedReferences propriedade. Você pode usar essa propriedade em conjunto com a MaxReceivedMessageSize
propriedade na associação para controlar a quantidade de metadados recuperados.
Para usar MetadataExchangeClient para obter metadados
Crie um novo MetadataExchangeClient objeto especificando explicitamente uma ligação, um nome de configuração de ponto de extremidade ou o endereço dos metadados.
Configure o MetadataExchangeClient para atender às suas necessidades. Por exemplo, você pode especificar credenciais a serem usadas ao solicitar metadados, controlar como as referências de metadados são resolvidas e definir a OperationTimeout propriedade para controlar por quanto tempo a solicitação de metadados deve retornar antes de atingir o tempo limite.
Obtenha o MetadataSet objeto que contém os metadados recuperados chamando um dos GetMetadata métodos. Observe que você só pode usar a GetMetadata sobrecarga que não usa argumentos se tiver especificado explicitamente um endereço ao construir o MetadataExchangeClient.
Exemplo
O exemplo de código a seguir mostra como usar MetadataExchangeClient para baixar e enumerar arquivos de metadados.
// 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);
Compilando o código
Para compilar este exemplo de código, você deve fazer referência ao assembly System.ServiceModel.dll e importar o System.ServiceModel.Description namespace.