Cara: Menentukan Pengikatan Klien dalam Kode
Dalam contoh ini, klien dibuat untuk menggunakan layanan kalkulator dan pengikatan untuk klien tersebut ditentukan secara imperatif dalam kode. Klien mengakses CalculatorService
, yang mengimplementasikan antarmuka ICalculator
, dan layanan dan klien menggunakan kelas BasicHttpBinding.
Prosedur ini mengasumsikan bahwa layanan kalkulator sedang berjalan. Untuk informasi tentang membangun layanan, lihat Cara: Menentukan Pengikatan Layanan dalam Konfigurasi. Hal tersebut juga dapat menggunakan ServiceModel Metadata Utility Tool (Svcutil.exe)Windows Communication Foundation (WCF) menyediakan untuk secara otomatis menghasilkan komponen klien. Alat ini menghasilkan kode klien untuk mengakses layanan.
Klien dibangun dalam dua bagian. Svcutil.exe menghasilkan ClientCalculator
yang mengimplementasikan antarmuka ICalculator
. Aplikasi klien ini kemudian dibangun dengan membuat instans ClientCalculator
dan kemudian menentukan pengikatan dan alamat untuk layanan dalam kode.
Untuk salinan sumber contoh ini, lihat sampel BasicBinding.
Untuk menentukan pengikatan kustom dalam kode
Gunakan Svcutil.exe dari baris perintah untuk menghasilkan kode dari metadata layanan.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Klien yang dihasilkan berisi antarmuka
ICalculator
yang menentukan kontrak layanan yang harus dipenuhi oleh implementasi klien.[ServiceContract] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); }
<ServiceContract()> _ Public Interface ICalculator <OperationContract()> _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double End Interface
Klien yang dihasilkan juga berisi implementasi
ClientCalculator
.public class CalculatorClient : System.ServiceModel.ClientBase<Microsoft.ServiceModel.Samples.ICalculator>, Microsoft.ServiceModel.Samples.ICalculator { public CalculatorClient() { } public CalculatorClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public CalculatorClient(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public CalculatorClient(string endpointConfigurationName, EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public CalculatorClient(Binding binding, EndpointAddress remoteAddress) : base(binding, remoteAddress) { } public double Add(double n1, double n2) { return base.Channel.Add(n1, n2); } public double Subtract(double n1, double n2) { return base.Channel.Subtract(n1, n2); } public double Multiply(double n1, double n2) { return base.Channel.Multiply(n1, n2); } public double Divide(double n1, double n2) { return base.Channel.Divide(n1, n2); } }
Public Class CalculatorClient Inherits System.ServiceModel.ClientBase(Of Microsoft.ServiceModel.Samples.ICalculator) Implements Microsoft.ServiceModel.Samples.ICalculator Public Sub New() End Sub Public Sub New(ByVal endpointConfigurationName As String) MyBase.New(endpointConfigurationName) End Sub Public Sub New(ByVal endpointConfigurationName As String, _ ByVal remoteAddress As String) MyBase.New(endpointConfigurationName, remoteAddress) End Sub Public Sub New(ByVal endpointConfigurationName As String, _ ByVal remoteAddress As EndpointAddress) MyBase.New(endpointConfigurationName, remoteAddress) End Sub Public Sub New(ByVal binding As Binding, _ ByVal remoteAddress As EndpointAddress) MyBase.New(binding, remoteAddress) End Sub Public Function Add(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements Microsoft.ServiceModel.Samples.ICalculator.Add Return MyBase.Channel.Add(n1, n2) End Function Public Function Subtract(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements Microsoft.ServiceModel.Samples.ICalculator.Subtract Return MyBase.Channel.Subtract(n1, n2) End Function Public Function Multiply(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements Microsoft.ServiceModel.Samples.ICalculator.Multiply Return MyBase.Channel.Multiply(n1, n2) End Function Public Function Divide(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements Microsoft.ServiceModel.Samples.ICalculator.Divide Return MyBase.Channel.Divide(n1, n2) End Function End Class
Membuat instans
ClientCalculator
yang menggunakan kelas BasicHttpBinding dalam aplikasi klien, lalu panggil operasi layanan di alamat yang ditentukan.//Client implementation code. class Client { static void Main() { //Specify the binding to be used for the client. BasicHttpBinding binding = new BasicHttpBinding(); //Specify the address to be used for the client. EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc"); // Create a client that is configured with this address and binding. CalculatorClient client = new CalculatorClient(binding, address); // Call the Add service operation. double value1 = 100.00D; double value2 = 15.99D; double result = client.Add(value1, value2); Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result); // Call the Subtract service operation. value1 = 145.00D; value2 = 76.54D; result = client.Subtract(value1, value2); Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result); // Call the Multiply service operation. value1 = 9.00D; value2 = 81.25D; result = client.Multiply(value1, value2); Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result); // Call the Divide service operation. value1 = 22.00D; value2 = 7.00D; result = client.Divide(value1, value2); Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result); //Closing the client gracefully closes the connection and cleans up resources client.Close(); Console.WriteLine(); Console.WriteLine("Press <ENTER> to terminate client."); Console.ReadLine(); } } }
'Client implementation code. Friend Class Client Shared Sub Main() 'Specify the binding to be used for the client. Dim binding As New BasicHttpBinding() 'Specify the address to be used for the client. Dim address As New EndpointAddress("http://localhost/servicemodelsamples/service.svc") ' Create a client that is configured with this address and binding. Dim client As New CalculatorClient(binding, address) ' Call the Add service operation. Dim value1 = 100.0R Dim value2 = 15.99R Dim result = client.Add(value1, value2) Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result) ' Call the Subtract service operation. value1 = 145.0R value2 = 76.54R result = client.Subtract(value1, value2) Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result) ' Call the Multiply service operation. value1 = 9.0R value2 = 81.25R result = client.Multiply(value1, value2) Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result) ' Call the Divide service operation. value1 = 22.0R value2 = 7.0R result = client.Divide(value1, value2) Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result) 'Closing the client gracefully closes the connection and cleans up resources client.Close() Console.WriteLine() Console.WriteLine("Press <ENTER> to terminate client.") Console.ReadLine() End Sub End Class End Namespace
Membangun dan menjalankan klien.