Compartilhar via


Exemplo de comunicados

O exemplo de Comunicados mostra como usar a funcionalidade de Comunicados do recurso Descoberta. Anúncios permitem que serviços enviem mensagens de anúncio contendo metadados sobre o serviço. Por padrão, um anúncio de saudação é enviado quando o serviço é iniciado e um anúncio de despedida é enviado quando o serviço é encerrado. Esses anúncios podem ser multicast ou podem ser enviados ponto a ponto. Este exemplo consiste em dois projetos: serviço e cliente.

Serviço

Este projeto contém um serviço de cálculo autogerenciado. No método Main, é criado um host de serviço e um ponto de extremidade de serviço é adicionado a ele. Em seguida, um ServiceDiscoveryBehavior é criado. Para habilitar anúncios, um endpoint de anúncio deve ser adicionado ao ServiceDiscoveryBehavior. Nesse caso, um ponto de extremidade padrão que usa multicast UDP é adicionado como o ponto de extremidade de anúncio. Isso transmite os anúncios por meio de um endereço UDP conhecido.

Uri baseAddress = new Uri("http://localhost:8000/" + Guid.NewGuid().ToString());

// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
     serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new WSHttpBinding(), String.Empty);

     ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();

     // Announce the availability of the service over UDP multicast
    serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());

    // Make the service discoverable over UDP multicast.
    serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
    serviceHost.Open();
    // ...
}

Cliente

Neste projeto, observe que o cliente hospeda um AnnouncementService. Além disso, dois delegados estão registrados para os eventos. Esses eventos determinam o que o cliente faz quando anúncios online e offline são recebidos.

// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();

// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;

Os métodos OnOnlineEvent e OnOfflineEvent lidam com as mensagens de anúncio hello e bye, respectivamente.

static void OnOnlineEvent(object sender, AnnouncementEventArgs e)
{
    Console.WriteLine();
    Console.WriteLine("Received an online announcement from {0}:", e.AnnouncementMessage.EndpointDiscoveryMetadata.Address);
PrintEndpointDiscoveryMetadata(e.AnnouncementMessage.EndpointDiscoveryMetadata);
}

static void OnOfflineEvent(object sender, AnnouncementEventArgs e)
{
    Console.WriteLine();
    Console.WriteLine("Received an offline announcement from {0}:", e.AnnouncementMessage.EndpointDiscoveryMetadata.Address);
            PrintEndpointDiscoveryMetadata(e.AnnouncementMessage.EndpointDiscoveryMetadata);
}

Para usar este exemplo

  1. Este exemplo utiliza endpoints HTTP e, para executar este exemplo, as ACLs de URL corretas devem ser adicionadas. Para obter mais informações, consulte Configurando HTTP e HTTPS. Executar o comando a seguir em um privilégio elevado deverá adicionar as ACLs apropriadas. Talvez você queira substituir o Domínio e o Nome de Usuário pelos argumentos a seguir se o comando não funcionar como está. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Crie a solução.

  3. Execute o aplicativo client.exe.

  4. Execute o aplicativo service.exe. Observe que o cliente recebe um comunicado online.

  5. Feche o aplicativo service.exe. Observe que o cliente recebe um comunicado offline.