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 CustomFindCriteria demonstra como criar uma correspondência de escopo personalizada usando lógica e como implementar um serviço de descoberta personalizado. Os clientes usam a funcionalidade de correspondência de escopo personalizada para refinar e desenvolver ainda mais sobre a funcionalidade de localização fornecida pelo sistema do WCF Discovery. O cenário coberto por este exemplo é o seguinte:
Um cliente está à procura de um serviço de calculadora.
Para refinar sua pesquisa, o cliente deve usar uma regra de correspondência de escopo personalizada.
De acordo com esta regra, um serviço responde ao cliente se o seu endpoint corresponder a qualquer um dos âmbitos especificados pelo cliente.
Demonstra
Criação de um serviço de descoberta personalizado.
Implementação de uma correspondência de escopo personalizada usando um algoritmo.
Discussão
O cliente está à procura de critérios de correspondência do tipo "OR". Um serviço responde se os escopos nos seus pontos finais corresponderem a algum dos escopos fornecidos pelo cliente. Nesse caso, o cliente está procurando um serviço de calculadora que tenha qualquer um dos escopos na lista a seguir:
net.tcp://Microsoft.Samples.Discovery/RedmondLocationnet.tcp://Microsoft.Samples.Discovery/SeattleLocationnet.tcp://Microsoft.Samples.Discovery/PortlandLocation
Para fazer isso, o cliente direciona os serviços para usar uma regra de correspondência de escopo personalizada, passando uma correspondência de escopo personalizada através de um URI. Para facilitar a correspondência de escopo personalizada, o serviço deve usar um serviço de descoberta personalizado que compreenda a regra de correspondência de escopo personalizada e implemente a lógica de correspondência associada.
No projeto cliente, abra o arquivo Program.cs. Observe que o ScopeMatchByFindCriteria campo do objeto é definido como um URI específico. Este identificador é enviado para o serviço. Se o serviço não entender essa regra, 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:
AsyncResult.cs: Esta é a implementação do
AsyncResultque é necessário pelos métodos de descoberta.CustomDiscoveryService.cs: Este ficheiro implementa o serviço de deteção personalizado. A implementação estende a DiscoveryService classe e substitui os métodos necessários. Observe a implementação do OnBeginFind método. O método verifica se a correspondência de escopo personalizada por regra foi especificada pelo cliente. Este é o mesmo URI personalizado que o cliente especificou anteriormente. Se a regra personalizada for especificada, o caminho de código que implementa a lógica de correspondência "OR" será seguido.
Esta lógica customizada atravessa todos os escopos em cada uma das interfaces finais que o serviço tem. Se algum dos escopos do endpoint corresponder a algum dos escopos fornecidos pelo cliente, o serviço de descoberta adiciona esse endpoint à resposta enviada de volta ao cliente.
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 do serviço. A classe auxiliar usada aqui é a
CustomDiscoveryExtensionclasse. Esta classe estende a DiscoveryServiceExtension classe. O utilizador deve substituir o método GetDiscoveryService. Nesse caso, o método retorna uma instância do serviço de descoberta personalizado que foi criado antes.PublishedEndpointsé um ReadOnlyCollection<T> que contém todos os endpoints da aplicação que são adicionados ao ServiceHost. O serviço de descoberta personalizada usa isso para preencher sua lista interna. Um usuário também pode adicionar outros metadados de ponto de extremidade.
Por fim, abra Program.cs. Observe que ambos os ServiceDiscoveryBehavior e CustomDiscoveryExtension são adicionados ao host. Depois que isso for feito e o host tiver um ponto de extremidade sobre o qual receber mensagens de descoberta, o aplicativo poderá usar o serviço de descoberta personalizado.
Observe que o cliente consegue encontrar o serviço sem saber o seu endereço.
Para configurar, compilar e executar o exemplo
Abra a solução que contém o projeto.
Construa o projeto.
Execute o aplicativo de serviço.
Execute a aplicação cliente.