Compartilhar via


Critérios de localização personalizados

O exemplo de CustomFindCriteria demonstra como criar uma correspondência de escopo personalizada usando a lógica e como implementar um serviço de descoberta personalizada. Os clientes usam a funcionalidade de correspondência de escopo personalizada para refinar e compilar ainda mais os resultados com base na funcionalidade de localização fornecida pelo sistema da Descoberta do WCF. O cenário que este exemplo aborda é o seguinte:

  1. Um cliente está procurando um serviço de calculadora.

  2. Para refinar a pesquisa, o cliente precisa usar uma regra de correspondência de escopo personalizada.

  3. De acordo com essa regra, um serviço responderá novamente ao cliente se o ponto de extremidade corresponder a um dos escopos especificados pelo cliente.

Demonstra

  • Como criar um serviço de descoberta personalizada.

  • Como implementar uma correspondência de escopo personalizada por algoritmo.

Discussão

O cliente está procurando critérios de correspondência do tipo "OR". Um serviço responderá se os escopos nos pontos de extremidade corresponderem a um dos escopos fornecidos pelo cliente. Nesse caso, o cliente está procurando um serviço de calculadora que tenha um dos escopos na seguinte lista:

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

Para fazer isso, o cliente orienta os serviços a usar uma regra de correspondência de escopo personalizada transmitindo uma correspondência de escopo personalizada por URI. Para facilitar a correspondência de escopo personalizada, o serviço precisa usar um serviço de descoberta personalizada que entenda a regra de correspondência de escopo personalizada e implemente a lógica de correspondência associada.

No projeto do cliente, abra o arquivo Program.cs. Observe que o campo ScopeMatchBy do objeto FindCriteria está definido como um URI específico. Esse identificador é enviado ao serviço. Se o serviço não entender essa regra, ele vai ignorar a solicitação de localização do cliente.

Abra o projeto de serviço. Três arquivos são usados para implementar o Serviço de Descoberta Personalizada:

  1. AsyncResult.cs: essa é a implementação do AsyncResult que é exigido pelos métodos Discovery.

  2. CustomDiscoveryService.cs: esse arquivo implementa o serviço de descoberta personalizada. A implementação estende a classe DiscoveryService e substitui os métodos necessários. Observe a implementação do método OnBeginFind. O método verifica se o escopo personalizado corresponde à regra especificada pelo cliente. Esse é o mesmo URI personalizado especificado anteriormente pelo cliente. Se a regra personalizada for especificada, o caminho do código que implementa a lógica de correspondência "OR" será seguido.

    Essa lógica personalizada percorre todos os escopos em cada um dos pontos de extremidade que o serviço tem. Se um dos escopos do ponto de extremidade corresponder a um dos escopos fornecidos pelo cliente, o serviço de descoberta adicionará esse ponto de extremidade à resposta enviada novamente ao cliente.

  3. CustomDiscoveryExtension.cs: a última etapa na implementação do serviço de descoberta é conectar essa implementação do serviço de descoberta personalizada ao host de serviço. A classe auxiliar usada aqui é a classe CustomDiscoveryExtension. Essa classe estende a classe DiscoveryServiceExtension. O usuário precisa substituir o método GetDiscoveryService. Nesse caso, o método retorna uma instância do serviço de descoberta personalizada que foi criado antes. PublishedEndpoints é uma ReadOnlyCollection<T> que contém todos os pontos de extremidade do aplicativo que são adicionados ao ServiceHost. O serviço de descoberta personalizada usa isso para preencher a lista interna. Um usuário também pode adicionar outros metadados de ponto de extremidade.

Por fim, abra Program.cs. Observe que o ServiceDiscoveryBehavior e a CustomDiscoveryExtension foram adicionados ao host. Depois que isso for feito e o host tiver um ponto de extremidade no qual receberá as mensagens de descoberta, o aplicativo poderá usar o serviço de descoberta personalizada.

Observe que o cliente pode localizar o serviço sem saber o endereço dele.

Para configurar, compilar, e executar o exemplo

  1. Abra a solução que contém o projeto.

  2. Compile o projeto.

  3. Execute o aplicativo de serviço.

  4. Execute o aplicativo cliente.