Dela via


Exempel på meddelanden

Exemplet Meddelanden visar hur du använder Meddelandefunktionen i upptäckningsfunktionen. Meddelanden gör det möjligt för tjänster att skicka meddelanden som innehåller metadata om tjänsten. Som standard skickas ett hello-meddelande när tjänsten startas och ett bye-meddelande skickas när tjänsten stängs av. Dessa meddelanden kan vara flersändningar eller skickas som punkt-till-punkt överföringar. Det här exemplet består av två projekt: tjänst och klient.

Tjänster

Det här projektet innehåller en lokalt installerad kalkylatortjänst. Main I metoden skapas en tjänstvärd och en tjänstslutpunkt läggs till i den. Därefter skapas en ServiceDiscoveryBehavior. Om du vill aktivera meddelanden måste en slutpunkt för meddelanden läggas till i ServiceDiscoveryBehavior. I det här fallet läggs en standardslutpunkt till med UDP multicast som slutpunkt för meddelanden. Detta sänder meddelandena via en välkänd UDP-adress.

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();
    // ...
}

Klient

I det här projektet, observera att klienten är värd för en AnnouncementService. Dessutom registreras två ombud vid evenemang. Dessa händelser avgör vad klienten gör när online- och offlinemeddelanden tas emot.

// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();

// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;

Metoderna OnOnlineEvent och OnOfflineEvent hanterar meddelandena hello respektive bye.

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);
}

Så här använder du det här exemplet

  1. Det här exemplet använder HTTP-slutpunkter och för att köra det här exemplet måste rätt URL-ACL:er läggas till. Mer information finns i Konfigurera HTTP och HTTPS. Om du kör följande kommando med en förhöjd behörighet bör du lägga till lämpliga ACL:er. Du kanske vill ersätta domänen och användarnamnet med följande argument om kommandot inte fungerar som det är. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Skapa lösningen.

  3. Kör client.exe-programmet.

  4. Kör service.exe-programmet. Observera att klienten får ett onlinemeddelande.

  5. Stäng programmet service.exe. Observera att klienten får ett offlinemeddelande.