Compartilhar via


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

  1. 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.

  2. 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.

  3. 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.

Confira também