Discovery Find e FindCriteria

Uma operação de localização de descoberta é iniciada por um cliente para descobrir um ou mais serviços e é uma das principais ações na descoberta. Executar uma localização envia uma mensagem WS-Discovery Probe pela rede. Os serviços que correspondem aos critérios especificados respondem com mensagens WS-Discovery ProbeMatch. Para obter mais informações sobre mensagens de descoberta, consulte a especificação WS-Discovery.

DiscoveryClient

A DiscoveryClient classe fornece o mecanismo para executar operações de localização e facilita a execução de operações de cliente de descoberta. Ele contém um Find método, que executa uma localização síncrona (bloqueio) e um FindAsync método, que inicia uma localização assíncrona sem bloqueio. Ambos os métodos usam um FindCriteria parâmetro e fornecem resultados ao usuário por meio de um FindResponse objeto.

FindCriteria

FindCriteria tem várias propriedades, que podem ser agrupadas em critérios de pesquisa, que especificam quais serviços você está procurando e encontram critérios de rescisão (quanto tempo a pesquisa deve durar). A FindCriteria pode conter vários critérios de pesquisa. Por padrão, o serviço tem que corresponder a todos os componentes, caso contrário, ele não se considera um serviço correspondente. Se quiser encontrar serviços que correspondam apenas a alguns dos critérios, você pode implementar a lógica de localização personalizada no serviço ou pode usar várias consultas.

Os critérios de pesquisa incluem:

  • ContractTypeNameElement - Opcional. O nome do contrato do serviço que está sendo pesquisado e os critérios normalmente usados ao pesquisar um serviço. Se mais de um nome de contrato for especificado, somente os pontos de extremidade de serviço correspondentes a TODOS os contratos responderão. Observe que no WCF um ponto de extremidade só pode suportar um contrato.

  • ScopeElement - Opcional. Os escopos são URIs absolutos usados para categorizar pontos de extremidade de serviço individuais. Você pode querer usar isso em cenários em que vários pontos de extremidade expõem o mesmo contrato e você deseja uma maneira de procurar um subconjunto dos pontos de extremidade. Se mais de um escopo for especificado, somente os pontos de extremidade de serviço correspondentes a TODOS os escopos responderão.

  • ScopeMatchBy - Especifica o algoritmo de correspondência a ser usado ao combinar os escopos na mensagem de teste com o do ponto de extremidade. Há cinco regras de correspondência de escopo suportadas:

    Se uma regra de correspondência de escopo não for especificada, ScopeMatchByPrefix será usada.

Os critérios de rescisão incluem:

  1. Duration - O tempo máximo de espera pelas respostas dos serviços da rede. A duração padrão é de 20 segundos.

  2. MaxResults - O número máximo de respostas a aguardar. Se MaxResults as respostas forem recebidas antes Duration de decorrido, a operação de localização será encerrada.

FindResponse

FindResponse Tem uma Endpoints propriedade Collection que contém todas as respostas enviadas por serviços correspondentes na rede. Se nenhum serviço respondeu, a coleção estará vazia. Se um ou mais serviços forem respondidos, cada resposta será armazenada em um EndpointDiscoveryMetadata objeto, que contém o endereço, o contrato e algumas informações adicionais sobre o serviço.

O exemplo a seguir mostra como executar uma operação de localização no código.

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

// Create FindCriteria
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));
findCriteria.Duration = TimeSpan.FromSeconds(10);

// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(findCriteria);

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)

Consulte também