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
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%
Dengan menggunakan Visual Studio, buka Basic.sln dan buat sampel.
Jalankan aplikasi service.exe.
Setelah layanan dimulai, jalankan client.exe.
Amati bahwa klien dapat menemukan layanan tanpa mengetahui alamatnya.