Voorbeeld van aankondigingen
In het voorbeeld Aankondigingen ziet u hoe u de aankondigingsfunctionaliteit van de detectiefunctie gebruikt. Met aankondigingen kunnen services aankondigingsberichten verzenden die metagegevens over de service bevatten. Standaard wordt er een halloaankondiging verzonden wanneer de service wordt gestart en er een bye-aankondiging wordt verzonden wanneer de service wordt afgesloten. Deze aankondigingen kunnen multicast zijn of ze kunnen punt-naar-punt worden verzonden. Dit voorbeeld bestaat uit twee projectenservice en client.
Service
Dit project bevat een zelf-hostende rekenmachineservice. In de Main
methode wordt een servicehost gemaakt en wordt er een service-eindpunt aan toegevoegd. Vervolgens wordt er een ServiceDiscoveryBehavior gemaakt. Als u aankondigingen wilt inschakelen, moet een aankondigingseindpunt worden toegevoegd aan het ServiceDiscoveryBehavior. In dit geval wordt een standaardeindpunt toegevoegd met behulp van UDP multicast als het aankondigingseindpunt. Hiermee worden de aankondigingen uitgezonden via een bekend UDP-adres.
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();
// ...
}
Klant
Houd er in dit project rekening mee dat de client als host fungeert voor een AnnouncementService. Bovendien worden twee gemachtigden geregistreerd bij gebeurtenissen. Deze gebeurtenissen bepalen wat de client doet wanneer online- en offlineaankondigingen worden ontvangen.
// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();
// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;
De OnOnlineEvent
en OnOfflineEvent
methoden verwerken respectievelijk de hello- en bye-aankondigingsberichten.
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);
}
Dit voorbeeld gebruiken
Dit voorbeeld maakt gebruik van HTTP-eindpunten en om dit voorbeeld uit te voeren, moeten de juiste URL-ACL's worden toegevoegd. Zie HTTP en HTTPS configureren voor meer informatie. Als u de volgende opdracht uitvoert met een verhoogde bevoegdheid, moet u de juiste ACL's toevoegen. U kunt uw domein en gebruikersnaam vervangen door de volgende argumenten als de opdracht niet werkt zoals is.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Bouw de oplossing.
Voer de client.exe-toepassing uit.
Voer de service.exe-toepassing uit. Houd er rekening mee dat de client een onlineaankondiging ontvangt.
Sluit de service.exe toepassing. Houd er rekening mee dat de client een offlineaankondiging ontvangt.