Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio Annunci mostra come usare la funzionalità Annunci della funzionalità di Discovery. Gli annunci consentono ai servizi di inviare messaggi di annuncio contenenti metadati relativi al servizio. Per impostazione predefinita, viene inviato un annuncio hello all'avvio del servizio e viene inviato un annuncio di bye quando il servizio viene arrestato. Questi annunci possono essere multicast oppure possono essere inviati da punto a punto. Questo esempio è costituito da due progetti: un progetto di servizio e un progetto di client.
Servizio
Questo progetto contiene un servizio di calcolatrice self-hosted. Nel metodo viene creato un host del Main
servizio e vi viene aggiunto un endpoint di servizio. Viene quindi creato un oggetto ServiceDiscoveryBehavior . Per abilitare gli annunci, è necessario aggiungere un endpoint di annuncio a ServiceDiscoveryBehavior. In questo caso, un endpoint standard, utilizzando il multicast UDP, viene aggiunto come endpoint dell'annuncio. Questo trasmette gli annunci su un indirizzo UDP noto.
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
In questo progetto si noti che il client ospita un oggetto AnnouncementService. Inoltre, due delegati vengono registrati agli eventi. Questi eventi determinano le operazioni eseguite dal client quando vengono ricevuti annunci online e offline.
// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();
// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;
I metodi OnOnlineEvent
e OnOfflineEvent
gestiscono rispettivamente i messaggi di annuncio di saluto e di congedo.
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);
}
Per usare questo esempio
Questo esempio usa endpoint HTTP e per eseguire questo esempio è necessario aggiungere gli ACL URL appropriati. Per altre informazioni, vedere Configurazione di HTTP e HTTPS. L'esecuzione del seguente comando con privilegi elevati dovrebbe aggiungere le ACL appropriate. È possibile sostituire il dominio e il nome utente per gli argomenti seguenti se il comando non funziona così com'è.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Costruire la soluzione.
Eseguire l'applicazione client.exe.
Eseguire l'applicazione service.exe. Si noti che il client riceve un annuncio online.
Chiudere l'applicazione service.exe. Si noti che il client riceve un annuncio offline.