Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo RetrieveMetadata demonstra como implementar um cliente que recupera dinamicamente metadados de um serviço para escolher um ponto de extremidade com o qual se comunicar. Este exemplo é baseado em Introdução. O serviço foi modificado para expor dois pontos de extremidade: um ponto de extremidade no endereço base usando a basicHttpBinding ligação e um ponto de extremidade seguro em {baseaddress}/secure usando a wsHttpBinding ligação. Em vez de configurar o cliente com os endereços de ponto de extremidade e associações, o cliente recupera dinamicamente os metadados para o serviço usando a MetadataExchangeClient classe e, em seguida, importa os metadados como um ServiceEndpointCollection usando a WsdlImporter classe.
Observação
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
O aplicativo cliente usa o importado ServiceEndpointCollection para criar clientes para se comunicar com o serviço. A aplicação cliente percorre cada ponto de extremidade recuperado e comunica-se com cada ponto de extremidade que implementa o contrato ICalculator. O endereço e a associação apropriados são fornecidos com o ponto de extremidade recuperado, para que o cliente seja configurado para se comunicar com cada ponto de extremidade, conforme mostrado no código de exemplo a seguir.
// Create a MetadataExchangeClient for retrieving metadata.
EndpointAddress mexAddress = new EndpointAddress(ConfigurationManager.AppSettings["mexAddress"]);
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
// Retrieve the metadata for all endpoints using metadata exchange protocol (mex).
MetadataSet metadataSet = mexClient.GetMetadata();
//Convert the metadata into endpoints.
WsdlImporter importer = new WsdlImporter(metadataSet);
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();
CalculatorClient client = null;
ContractDescription contract = ContractDescription.GetContract(typeof(ICalculator));
// Communicate with each endpoint that supports the ICalculator contract.
foreach (ServiceEndpoint ep in endpoints)
{
if (ep.Contract.Namespace.Equals(contract.Namespace) && ep.Contract.Name.Equals(contract.Name))
{
// Create a client using the endpoint address and binding.
client = new CalculatorClient(ep.Binding, new EndpointAddress(ep.Address.Uri));
Console.WriteLine("Communicate with endpoint: ");
Console.WriteLine(" AddressPath={0}", ep.Address.Uri.PathAndQuery);
Console.WriteLine(" Binding={0}", ep.Binding.Name);
// Call operations.
DoCalculations(client);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
}
}
A janela do console do utilizador exibe as operações enviadas para cada um dos pontos de extremidade, exibindo o caminho do endereço e o nome da ligação.
Para configurar, compilar e executar o exemplo
Verifique se você executou o procedimento de instalação do One-Time para os exemplos do Windows Communication Foundation.
Para criar a edição C#, C++ ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.