Bagikan melalui


Sampel Pengumuman

Sampel Pengumuman menunjukkan cara menggunakan fungsionalitas Pengumuman fitur Penemuan. Pengumuman memungkinkan layanan untuk mengirim pesan pengumuman yang berisi metadata tentang layanan. Secara default, pengumuman halo dikirim saat layanan dimulai dan pengumuman bye dikirim saat layanan dimatikan. Pengumuman ini dapat berupa multicast atau dapat dikirim secara point-to-point. Sampel ini terdiri dari dua layanan proyek dan klien.

Layanan

Proyek ini berisi layanan kalkulator yang dihost sendiri. Dalam metode Main, host layanan dibuat dan titik akhir layanan ditambahkan ke dalamnya. Selanjutnya, dibuat ServiceDiscoveryBehavior. Untuk mengaktifkan pengumuman, titik akhir pengumuman harus ditambahkan ke ServiceDiscoveryBehavior. Dalam hal ini titik akhir standar, menggunakan multicast UDP ditambahkan sebagai titik akhir pengumuman. Titik akhir ini menyiarkan pengumuman melalui alamat UDP terkenal.

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

Klien

Dalam proyek ini, perhatikan bahwa klien meng-hosting AnnouncementService. Selain itu, dua delegasi terdaftar dengan peristiwa. Peristiwa ini menentukan apa yang dilakukan klien ketika pengumuman online dan offline diterima.

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

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

Metode OnOnlineEvent dan OnOfflineEvent menangani pesan pengumuman halo dan bye masing-masing.

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

Untuk menggunakan sampel ini

  1. Sampel ini menggunakan titik akhir HTTP dan untuk menjalankan sampel ini, ACL URL yang tepat harus ditambahkan. Untuk informasi selengkapnya, lihat Mengonfigurasi HTTP dan HTTPS. Menjalankan perintah berikut pada hak istimewa yang ditingkatkan harus menambahkan ACL yang sesuai. Anda mungkin ingin mengganti Domain dan Nama Pengguna Anda untuk argumen berikut jika perintah tidak berfungsi apa adanya. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Bangun solusinya.

  3. Jalankan aplikasi client.exe.

  4. Jalankan aplikasi service.exe. Perhatikan bahwa klien menerima pengumuman online.

  5. Tutup aplikasi service.exe. Perhatikan bahwa klien menerima pengumuman offline.