Como: usar MetadataExchangeClient para recuperar metadados
Use a classe MetadataExchangeClient para baixar metadados usando o protocolo WS-MetadataExchange (MEX). Os arquivos de metadados recuperados são retornados como um objeto MetadataSet. O objeto MetadataSet retornado contém uma coleção de objetos MetadataSection, 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 de linguagem WSDL, você poderá importar os metadados usando o WsdlImporter.
Os construtores MetadataExchangeClient que assumem um endereço usam a associação na classe estática MetadataExchangeBindings que corresponde ao esquema URI (Uniform Resource Identifier) do endereço. Você tem também a opção de usar o construtor MetadataExchangeClient, 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 do WCF (Windows Communication Foundation), o tipo MetadataExchangeClient 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 precisa especificar o contrato IMetadataExchange. O endereço na configuração do ponto de extremidade não é carregado, portanto, você precisa usar uma das sobrecargas de GetMetadata que usam um endereço. Ao especificar o endereço de metadados usando uma instância EndpointAddress, o MetadataExchangeClient pressupõe que o endereço aponte para um ponto de extremidade MEX. Se você especificar o endereço de metadados como uma URL, também precisará especificar qual MetadataExchangeClientMode usar, MEX ou HTTP GET.
Importante
Por padrão, MetadataExchangeClient resolve todas as referências para você, incluindo importações de esquema e inclusões do WSDL e XML. Você pode desabilitar essa funcionalidade definindo a propriedade ResolveMetadataReferences como false
. Você pode controlar o número máximo de referências a serem resolvidas usando a propriedade MaximumResolvedReferences. Você pode usar essa propriedade em conjunto com a propriedade MaxReceivedMessageSize
na associação para controlar a quantidade de metadados recuperados.
Para usar MetadataExchangeClient para obter metadados
Crie um novo objeto MetadataExchangeClient especificando explicitamente uma associaçã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 propriedade OperationTimeout para controlar quanto tempo a solicitação de metadados deve retornar antes de atingir o tempo limite.
Obtenha o objeto MetadataSet que contém os metadados recuperados chamando um dos métodos GetMetadata. Observe que você só pode usar a sobrecarga GetMetadata que não usa argumentos se você especificou 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ê precisa fazer referência ao assembly System.ServiceModel.dll e importar o namespace System.ServiceModel.Description.