Delen via


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

  1. 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%

  2. Bouw de oplossing.

  3. Voer de client.exe-toepassing uit.

  4. Voer de service.exe-toepassing uit. Houd er rekening mee dat de client een onlineaankondiging ontvangt.

  5. Sluit de service.exe toepassing. Houd er rekening mee dat de client een offlineaankondiging ontvangt.