Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao escrever um aplicativo cliente WCF, você precisa saber o endereço do ponto de extremidade do serviço que você está chamando. Em muitas situações, o endereço do ponto de extremidade de um serviço não é conhecido com antecedência ou o endereço do serviço muda ao longo do tempo. O Canal do Cliente de Descoberta permite que você escreva um aplicativo cliente WCF, descreva o serviço que deseja chamar e o canal cliente envia automaticamente uma solicitação de investigação. Quando um serviço responde, o canal cliente Discovery recupera o endereço do ponto de extremidade para o serviço a partir da resposta de investigação e o usa para chamar o serviço.
Usando o canal cliente Discovery
Para usar o canal cliente Discovery, adicione uma instância de DiscoveryClientBindingElement à sua pilha de canais do cliente. Como alternativa, você pode usar o DynamicEndpoint e um DiscoveryClientBindingElement é adicionado automaticamente à sua associação se ainda não estiver presente.
Cuidado
É recomendável que DiscoveryClientBindingElement seja o elemento mais importante na pilha de canais do cliente. Qualquer elemento de associação adicionado na parte superior do DiscoveryClientBindingElement deve garantir que o ChannelFactory ou o canal que ele cria não use o endereço do ponto de extremidade ou o endereço Via (passado para o método CreateChannel ) porque eles podem não conter o endereço correto.
A DiscoveryClientBindingElement classe contém duas propriedades públicas:
FindCriteria, que é usado para descrever o serviço que você deseja chamar.
DiscoveryEndpointProvider, que especifica o ponto de extremidade de descoberta para o qual enviar mensagens de descoberta.
A FindCriteria propriedade permite especificar o contrato de serviço que você está procurando, quaisquer URIs de escopo necessárias e o número máximo de tempo para tentar abrir o canal. O tipo de contrato é especificado chamando o construtor FindCriteria. As URIs de escopo podem ser adicionadas à propriedade Scopes. A MaxResults propriedade permite que você especifique o número máximo de resultados aos quais o cliente tenta se conectar. Quando uma resposta da sonda é recebida, o cliente tenta abrir o canal usando o endereço do ponto de extremidade da resposta da sonda. Se ocorrer uma exceção, o cliente passará para a próxima resposta de investigação, aguardando que mais respostas sejam recebidas, se necessário. Ele continua a fazer isso até que o canal seja aberto com êxito ou o número máximo de resultados seja atingido. Para obter mais informações sobre essas configurações, consulte FindCriteria.
A DiscoveryEndpointProvider propriedade permite que você especifique o ponto de extremidade de descoberta a ser usado. Normalmente, esse é um UdpDiscoveryEndpoint, mas pode ser qualquer ponto de extremidade válido.
Ao criar a associação a ser usada para se comunicar com o serviço, você deve ter cuidado para usar exatamente a mesma associação que o serviço. A única diferença é que a associação de cliente tem um DiscoveryClientBindingElement na parte superior da pilha. Se o serviço estiver usando uma das associações fornecidas pelo sistema, crie uma nova CustomBinding e passe a associação fornecida pelo sistema para o CustomBinding construtor. Em seguida, você pode adicionar o DiscoveryClientBindingElement chamando Insert na Elements propriedade.
Depois de adicionar a DiscoveryClientBindingElement associação e configurá-la, você poderá criar uma instância da classe de cliente WCF, abri-la e chamar seus métodos. O exemplo a seguir usa o Canal do Cliente de Descoberta para descobrir um serviço WCF que implementa a classe ICalculator (usada no tutorial de Introdução ao WCF) e chama o método Add.
// Create the DiscoveryClientBindingElement
DiscoveryClientBindingElement bindingElement = new DiscoveryClientBindingElement();
// Search for a service that implements the ICalculator interface, attempting to open
// the channel a maximum of 2 times
bindingElement.FindCriteria = new FindCriteria(typeof(ICalculator)) { MaxResults = 2 };
// Use the UdpDiscoveryEndpoint
bindingElement.DiscoveryEndpoint = new UdpDiscoveryEndpoint();
// The service uses the BasicHttpBinding, so use that and insert the DiscoveryClientBindingElement at the
// top of the stack
CustomBinding binding = new CustomBinding(new BasicHttpBinding());
binding.Elements.Insert(0,bindingElement);
try
{
// Create the WCF client and call a method
CalculatorClient client = new CalculatorClient(binding, new EndpointAddress("http://schemas.microsoft.com/dynamic"));
client.Open();
client.Add(1, 1);
}
catch (EndpointNotFoundException ex)
{
Console.WriteLine("An exception occurred: " + ex.Message);
}
Segurança e o canal cliente Discovery
Ao usar o canal cliente Discovery, dois pontos de extremidade estão sendo especificados. Um deles é usado para mensagens de descoberta, geralmente UdpDiscoveryEndpoint, e o outro é o ponto de extremidade do aplicativo. Ao implementar um serviço seguro, é necessário ter o cuidado de proteger os dois pontos de extremidade. Para obter mais informações sobre segurança, consulte Proteção de Serviços e Clientes.