Partilhar via


Modelo de objeto de descoberta do WCF

WCF Discovery consiste em um conjunto de tipos que fornecem um modelo de programação unificado que permite escrever serviços que são detetáveis em tempo de execução e clientes que localizam e usam esses serviços.

Tornando um serviço detetável e localizando serviços

Para tornar um serviço WCF detetável, adicione um ServiceDiscoveryBehavior ao ServiceDescription host do serviço e adicione um ponto de extremidade de descoberta. Se um serviço estiver configurado para enviar mensagens de anúncio (adicionando um AnnouncementEndpoint), o anúncio será enviado quando o host de serviço for aberto e fechado.

Um cliente que deseja ouvir mensagens de anúncio de serviço hospeda um serviço de anúncio e adiciona um ou mais pontos de extremidade de anúncio. O serviço de anúncio recebe mensagens de anúncio e gera eventos de anúncio.

Um cliente usa a DiscoveryClient classe para procurar serviços disponíveis. O aplicativo cliente instancia a DiscoveryClient classe, passando um ponto de extremidade de descoberta que especifica para onde enviar mensagens de descoberta. O cliente chama o Find método, que envia uma Probe solicitação. Os serviços que escutam mensagens de descoberta recebem essa Probe solicitação. Se o serviço corresponder aos critérios especificados no Probe, ele enviará uma ProbeMatch mensagem de volta ao cliente.

Modelo de objeto

A API de descoberta do WCF define as seguintes classes:

AnúncioCliente

A AnnouncementClient classe fornece métodos síncronos e assíncronos para enviar mensagens de anúncio. Existem dois tipos de mensagens de anúncio, Hello e Bye. Uma mensagem Hello é enviada para indicar que um serviço ficou disponível e uma mensagem Bye é enviada para indicar que um serviço existente ficou indisponível. O desenvolvedor cria uma AnnouncementClient instância, passando uma instância de como um parâmetro do AnnouncementEndpoint construtor.

AnúncioPonto final

AnnouncementEndpoint representa um ponto de extremidade padrão com um contrato de anúncio fixo. É usado por um serviço ou cliente para enviar e receber mensagens de anúncio. Por padrão, a AnnouncementEndpoint classe é definida para usar a versão do protocolo WS_Discovery 11.

Serviço de Anúncios

AnnouncementService é uma implementação fornecida pelo sistema de um serviço de anúncio que recebe e processa mensagens de anúncio. Quando uma mensagem Hello ou Bye é recebida, a AnnouncementService instância chama o método OnBeginOnlineAnnouncement virtual apropriado ou OnBeginOfflineAnnouncement, que gera eventos de anúncio.

DiscoveryClient

A DiscoveryClient classe é usada por um aplicativo cliente para localizar e resolver serviços disponíveis. Ele fornece métodos síncronos e assíncronos para localizar e resolver serviços com base no especificado FindCriteria e ResolveCriteria respectivamente. O desenvolvedor cria uma DiscoveryClient instância e fornece uma instância de como um parâmetro do DiscoveryEndpoint construtor.

Para localizar um serviço, o desenvolvedor invoca o método síncrono ou assíncrono Find , que fornece uma FindCriteria instância que contém os critérios de pesquisa a serem usados. O DiscoveryClient cria uma Probe mensagem com os cabeçalhos apropriados e envia a solicitação de localização. Como pode haver mais de uma solicitação pendente Find a qualquer momento, o cliente correlaciona as respostas recebidas e valida a resposta. Em seguida, ele entrega os resultados para o chamador da Find operação usando FindResponse.

Para resolver um serviço conhecido, o desenvolvedor invoca o método síncrono ou assíncrono Resolve que fornece uma instância que ResolveCriteria contém o EndpointAddress do serviço conhecido. O DiscoveryClient cria a Resolve mensagem com os cabeçalhos apropriados e envia a solicitação de resolução. A resposta recebida é correlacionada com as solicitações de resolução pendentes e o resultado é entregue ao chamador da Resolve operação usando ResolveResponseo .

Se um proxy de descoberta estiver presente na rede e enviar DiscoveryClient a solicitação de descoberta de forma multicast, o proxy de descoberta poderá responder com a mensagem Hello de supressão de multicast. O DiscoveryClient gera o ProxyAvailable evento quando recebe mensagens Hello em resposta a Find pendentes ou Resolve solicitações. O ProxyAvailable evento contém o EndpointDiscoveryMetadata proxy sobre a descoberta. Cabe ao desenvolvedor usar essas informações para alternar do modo Ad hoc para o modo gerenciado.

DiscoveryEndpoint

DiscoveryEndpoint representa um ponto de extremidade padrão com um contrato de descoberta fixo. Ele é usado por um serviço ou cliente para enviar ou receber mensagens de descoberta. Por padrão, DiscoveryEndpoint está definido para usar ServiceDiscoveryMode.Managed o modo e a versão WSDiscovery11 WS-Discovery.

DiscoveryMessageSequenceGenerator

DiscoveryMessageSequenceGenerator é usado para gerar um DiscoveryMessageSequence quando o serviço está enviando mensagens de descoberta ou anúncio.

DiscoveryService

A DiscoveryService classe abstrata fornece uma estrutura para receber e processar ResolveProbe mensagens. Quando uma Probe mensagem é recebida, DiscoveryService cria uma instância de FindRequestContext com base na mensagem de entrada e invoca o OnBeginFind método virtual. Quando uma Resolve mensagem é recebida, DiscoveryService invoca o OnBeginResolve método virtual. Você pode herdar dessa classe para fornecer uma implementação personalizada do Serviço de Descoberta.

DiscoveryProxy

A DiscoveryProxy classe abstrata fornece uma estrutura para receber e processar mensagens de descoberta e anúncio. Você herda dessa classe quando estiver implementando um proxy de descoberta personalizado. Quando uma Probe mensagem é recebida por multicast, a DiscoveryProxy classe chama o BeginShouldRedirectFind método virtual para determinar se uma mensagem de supressão de multicast deve ser enviada. Se o desenvolvedor decidir não enviar uma mensagem de supressão de multicast ou se a Probe mensagem foi recebida por unicast, ele criará uma instância da classe com base na mensagem de FindRequestContext entrada e invocará o OnBeginFind método virtual. Quando uma Resolve mensagem é recebida por multicast, a DiscoveryProxy classe chama o ShouldRedirectResolve método virtual para determinar se uma mensagem de supressão de multicast deve ser enviada. Se o desenvolvedor decidir não enviar uma mensagem de supressão de multicast ou se a Resolve mensagem foi recebida por unicast, ele criará uma instância da classe com base na mensagem de ResolveCriteria entrada e invocará o OnBeginResolve método virtual. Quando uma mensagem Hello ou Bye é recebida, DiscoveryProxy chama o método virtual apropriado (OnBeginOnlineAnnouncement ou OnBeingOfflineAnnouncement), que gera eventos de anúncio.

DiscoveryVersion

A DiscoveryVersion classe representa a versão do protocolo de descoberta a ser usada.

EndpointDiscoveryBehavior

A EndpointDiscoveryBehavior classe é usada para controlar a capacidade de descoberta de um ponto de extremidade, especificar as extensões, nomes de tipo de contrato adicionais. e os escopos associados a esse ponto de extremidade. Esse comportamento é adicionado a um ponto de extremidade do aplicativo para configurar seu EndpointDiscoveryMetadata. Quando ServiceDiscoveryBehavior é adicionado ao host de serviço, todos os pontos de extremidade de aplicativo hospedados pelo host de serviço por padrão tornam-se detetáveis. O desenvolvedor pode desativar a descoberta para um ponto de extremidade específico definindo a Enabled propriedade como false.

EndpointDiscoveryMetadata

A EndpointDiscoveryMetadata classe fornece uma representação independente de versão de um ponto de extremidade publicado pelo serviço. Ele contém endereços de ponto de extremidade, ouvir URIs, nomes de tipo de contrato, escopos, versão de metadados e extensões especificadas pelo desenvolvedor do serviço. O FindCriteria enviado pelo cliente durante uma Probe operação é comparado com o EndpointDiscoveryMetadata. Se os critérios corresponderem, então o EndpointDiscoveryMetadata é devolvido ao cliente. O endereço do ponto de extremidade em ResolveCriteria é comparado com o endereço do ponto de extremidade de EndpointDiscoveryMetadata. Se os critérios corresponderem, então o EndpointDiscoveryMetadata é devolvido ao cliente.

FindCriteria

A FindCriteria classe é uma classe independente de versão usada para especificar os critérios usados ao localizar um serviço. Ele suporta totalmente os critérios definidos pelo WS-Discovery para serviços correspondentes. Ele também tem extensões que os desenvolvedores podem usar para especificar valores personalizados que podem ser usados durante o processo de correspondência. O desenvolvedor pode fornecer os critérios de término para a Find operação especificando o MaxResults, que especifica o número total de serviços que o desenvolvedor está procurando ou que especifica o Duration, que é o valor que especifica quanto tempo o cliente espera por respostas.

FindRequestContext

A FindRequestContext classe é instanciada pelo serviço de descoberta com base na Probe mensagem que recebe quando um cliente inicia uma Find operação. Ele contém uma instância FindCriteria que foi especificada pelo cliente.

FindResponse

A FindResponse classe é devolvida ao chamador de Find com as respostas da Find operação. Também está presente em FindCompletedEventArgs. Ele contém uma coleção de EndpointDiscoveryMetadata, que é a coleção de pontos finais descobertos e um dicionário de EndpointDiscoveryMetadata e DiscoveryMessageSequence.

ResolveCriteria

A ResolveCriteria classe é uma classe independente de versão usada para especificar os critérios usados ao resolver um serviço já conhecido. Ele contém o endereço do ponto de extremidade do serviço conhecido. O desenvolvedor pode fornecer os critérios de término para a operação de resolução especificando o Duration, que especifica quanto tempo o cliente aguarda por respostas.

ResolveResponse

O ResolveResponse é retornado ao chamador do Resolve método com a resposta da Resolve operação. Também está presente em ResolveCompletedEventArgs. Ele contém uma instância de , que são os pontos de EndpointDiscoveryMetadataextremidade descobertos e uma instância de DiscoveryMessageSequence.

ServiceDiscoveryBehavior

A ServiceDiscoveryBehavior classe permite que o desenvolvedor adicione o recurso de descoberta a um serviço. Você adiciona esse comportamento ao ServiceHost. A ServiceDiscoveryBehavior classe itera sobre os pontos de extremidade do aplicativo adicionados ao host de serviço e cria uma coleção de pontos de EndpointDiscoveryMetadata extremidade detetáveis. Todos os pontos de extremidade são detetáveis por padrão. A capacidade de descoberta de um ponto de extremidade específico pode ser controlada adicionando o EndpointDiscoveryBehavior a esse ponto de extremidade específico. Se os pontos de extremidade de anúncio forem adicionados ServiceDiscoveryBehavior , o anúncio de todos os pontos de extremidade detetáveis será enviado sobre cada um dos pontos de extremidade de anúncio quando o host de serviço for aberto ou fechado.

UdpAnnouncementEndpoint

A UdpAnnouncementEndpoint classe é um ponto de extremidade de anúncio padrão que é pré-configurado para anúncio em uma ligação de multicast UDP. Por padrão, UdpAnnouncementEndpoint está definido para usar a versão WS_Discovery WSApril2005.

UdpDiscoveryEndpoint

A UdpDiscoveryEndpoint classe é um ponto de extremidade de descoberta padrão que é pré-configurado para descoberta em uma associação de multicast UDP. Por padrão, DiscoveryEndpoint está definido para usar a versão e ServiceDiscoveryMode.Adhoc o modo WS-Discovery WSDiscovery11.