Exemplo de anúncios
A amostra Announcements mostra como usar a funcionalidade de anúncio do recurso Descoberta. Anúncios permitem que os serviços enviem mensagens de anúncio que contêm metadados sobre o serviço. Por padrão, um anúncio hello é enviado quando o serviço é iniciado e um anúncio de bye é enviado quando o serviço é desligado. Esses anúncios podem ser multicast ou podem ser enviados ponto a ponto. Esta amostra consiste em dois projetos de serviço e cliente.
Serviço
Este projeto contém um serviço de calculadora auto-hospedada. No método Main
, um host de serviço é criado e um ponto de extremidade de serviço é adicionado a ele. A seguir, 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 que usa multicast UDP é adicionado como o ponto de extremidade de anúncio. Isso transmite os anúncios em 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 são registrados com eventos. Esses eventos ditam 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
Este exemplo usa pontos de extremidade HTTP e, para executar este exemplo, é necessário adicionar ACLs de URL adequadas. Para obter mais informações, confira Configurar HTTP e HTTPS. Executar o comando a seguir em um privilégio elevado deve adicionar as ACLs apropriadas. Talvez você queira substituir o Domínio e o Nome de Usuário pelos seguintes argumentos se o comando não funcionar como está.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Compile a solução.
Execute o aplicativo client.exe.
Execute o aplicativo service.exe. Observe que o cliente recebe um anúncio online.
Feche o aplicativo service.exe. Observe que o cliente recebe um anúncio offline.