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.

Catatan

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

Layanan

Ini adalah implementasi layanan kalkulator sederhana. Kode terkait penemuan dapat ditemukan pada Main di mana ServiceDiscoveryBehavior ditambahkan ke host layanan dan UdpDiscoveryEndpoint ditambahkan seperti yang 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, titik akhir standar, menyelesaikan titik akhir layanan saat klien dibuka. Dalam hal ini, DynamicEndpoint mencari layanan berdasarkan kontrak layanan. DynamicEndpoint melakukan penelusuran melalui UdpDiscoveryEndpoint secara default. Setelah menemukan titik akhir layanan, klien menghubungkan 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 kelas DiscoveryClient untuk mencari layanan. DynamicEndpoint mewarisi dari ServiceEndpoint, sehingga dapat diteruskan ke metode InvokeCalculatorService. Contoh kemudian menggunakan DynamicEndpoint untuk membuat instans CalculatorServiceClient dan memanggil berbagai operasi 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. Dengan 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.