Bagikan melalui


Sampel Dasar

Sampel penemuan Dasar menunjukkan cara membuat layanan dapat ditemukan dan cara mencari dan memanggil layanan yang dapat ditemukan. Sampel ini terdiri dari dua proyek: layanan dan klien.

Nota

Sampel ini mengimplementasikan penemuan dalam kode. Untuk sampel yang mengimplementasikan penemuan dalam konfigurasi, lihat Konfigurasi.

Pelayanan

Ini adalah implementasi layanan kalkulator sederhana. Kode penemuan terkait dapat ditemukan di Main, di mana ServiceDiscoveryBehavior ditambahkan ke host layanan dan UdpDiscoveryEndpoint ditambahkan seperti ditunjukkan dalam kode berikut.

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
    serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
      WSHttpBinding(), String.Empty);

    // Make the service discoverable over UDP multicast
    serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    serviceHost.Open();
    // ...
}

Klien

Klien menggunakan DynamicEndpoint untuk menemukan layanan. DynamicEndpoint, sebagai titik akhir standar, mengatur titik akhir layanan ketika klien dibuka. Dalam hal ini, DynamicEndpoint mencari layanan berdasarkan kontrak layanan. DynamicEndpoint melakukan pencarian pada UdpDiscoveryEndpoint secara bawaan. Setelah menemukan titik akhir layanan, klien terhubung ke layanan tersebut melalui pengikatan yang ditentukan.

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}

Klien mendefinisikan metode yang disebut InvokeCalculatorService yang menggunakan DiscoveryClient kelas untuk mencari layanan. DynamicEndpoint mewarisi dari ServiceEndpoint, sehingga dapat diteruskan ke metode InvokeCalculatorService. Kemudian, contoh ini menggunakan DynamicEndpoint untuk membuat sebuah instans CalculatorServiceClient dan memanggil berbagai operasi dari layanan kalkulator.

static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
   // Create a client
   CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);

   Console.WriteLine("Invoking CalculatorService");
   Console.WriteLine();

   double value1 = 100.00D;
   double value2 = 15.99D;

   // Call the Add service operation.
   double result = client.Add(value1, value2);
   Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

   // Call the Subtract service operation.
   result = client.Subtract(value1, value2);
   Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

   // Call the Multiply service operation.
   result = client.Multiply(value1, value2);
   Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

   // Call the Divide service operation.
   result = client.Divide(value1, value2);
   Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
   Console.WriteLine();

   //Closing the client gracefully closes the connection and cleans up resources
   client.Close();
}

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. Menggunakan Visual Studio, buka Basic.sln dan buat sampel.

  3. Jalankan aplikasi service.exe.

  4. Setelah layanan dimulai, jalankan client.exe.

  5. Amati bahwa klien dapat menemukan layanan tanpa mengetahui alamatnya.