Udostępnij za pośrednictwem


Anonse — przykład

W przykładzie Anonsy pokazano, jak używać funkcji Anons funkcji odnajdywania. Anonsy umożliwiają usługom wysyłanie komunikatów anonsów zawierających metadane dotyczące usługi. Domyślnie po uruchomieniu usługi jest wysyłane anons powitania, a po zamknięciu usługi jest wysyłane ogłoszenie bye. Te ogłoszenia mogą być multiemisji lub mogą być wysyłane do punktu. Ten przykład składa się z dwóch usług projektów i klienta.

Usługa

Ten projekt zawiera samoobsługową usługę kalkulatora. W metodzie Main jest tworzony host usługi i do niego dodawany jest punkt końcowy usługi. Następnie zostanie utworzony element ServiceDiscoveryBehavior . Aby włączyć anonsy, do elementu należy dodać punkt końcowy anonsu ServiceDiscoveryBehavior. W takim przypadku standardowy punkt końcowy przy użyciu multiemisji UDP jest dodawany jako punkt końcowy anonsu. Spowoduje to emisję anonsów za pośrednictwem dobrze znanego adresu UDP.

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

W tym projekcie należy pamiętać, że klient hostuje element AnnouncementService. Ponadto dwa delegaty są rejestrowane ze zdarzeniami. Te zdarzenia określają, co klient robi po odebraniu anonsów online i offline.

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

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

Metody OnOnlineEvent i OnOfflineEvent obsługują odpowiednio komunikaty anonsów hello i 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);
}

Aby użyć tego przykładu

  1. W tym przykładzie użyto punktów końcowych HTTP i do uruchomienia tego przykładu należy dodać odpowiednie listy ACL adresów URL. Aby uzyskać więcej informacji, zobacz Konfigurowanie protokołu HTTP i HTTPS. Wykonanie następującego polecenia z podwyższonym poziomem uprawnień powinno spowodować dodanie odpowiednich list ACL. Jeśli polecenie nie działa, możesz zastąpić domenę i nazwę użytkownika następującymi argumentami. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Stwórz rozwiązanie.

  3. Uruchom aplikację client.exe.

  4. Uruchom aplikację service.exe. Zwróć uwagę, że klient otrzymuje anons online.

  5. Zamknij aplikację service.exe. Zwróć uwagę, że klient otrzymuje anons w trybie offline.