Partilhar via


Exemplo de anúncios

O exemplo Anúncios mostra como usar a funcionalidade Anúncio do recurso Descoberta. Os anúncios permitem que os serviços enviem mensagens de anúncio que contenham 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 adeus é enviado quando o serviço é encerrado. Esses anúncios podem ser enviados em multicast ou ponto a ponto. Este exemplo consiste em dois projetos: um de serviço e outro de cliente.

Serviço

Este projeto contém um serviço de calculadora auto-hospedado. No método Main, um host de serviço é criado e um ponto de extremidade de serviço é adicionado a ele. Em seguida, um ServiceDiscoveryBehavior é criado. Para habilitar anúncios, um ponto de extremidade de anúncio deve ser adicionado ao ServiceDiscoveryBehavior. Nesse caso, um ponto de extremidade padrão, usando multicast UDP, é adicionado como ponto de extremidade de anúncio. Isto transmite os anúncios através de um endereço UDP bem 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, note que o cliente hospeda um AnnouncementService. Além disso, dois delegados estão inscritos nos eventos. Esses eventos ditam o que o cliente faz quando anúncios on-line e off-line 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, respectivamente, com as mensagens de anúncio de saudação e despedida.

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, devem ser adicionadas ACLs adequadas de URL. Para obter mais informações, consulte Configurando HTTP e HTTPS. A execução do comando a seguir com um privilégio elevado deve adicionar as ACLs apropriadas. Você pode querer substituir seu domínio e nome de usuário para os seguintes argumentos 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 anúncio on-line.

  5. Feche o aplicativo service.exe. Observe que o cliente recebe um anúncio offline.