Bagikan melalui


Cara: Menentukan Pengikatan Klien dalam Konfigurasi

Dalam contoh ini, aplikasi konsol klien dibuat untuk menggunakan layanan kalkulator, dan pengikatan untuk klien tersebut ditentukan secara deklaratif dalam konfigurasi. Klien mengakses CalculatorService, yang mengimplementasikan antarmuka ICalculator, dan layanan dan klien menggunakan kelas BasicHttpBinding.

Prosedur yang diuraikan mengasumsikan bahwa layanan kalkulator sedang berjalan. Untuk informasi tentang cara membangun layanan, lihat Cara: Menentukan Pengikatan Layanan dalam Konfigurasi. Ini juga menggunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe) yang Windows Communication Foundation (WCF) sediakan untuk secara otomatis menghasilkan komponen klien. Alat ini menghasilkan kode dan konfigurasi klien untuk mengakses layanan.

Klien dibangun dalam dua bagian. Svcutil.exe menghasilkan ClientCalculator yang mengimplementasikan antarmuka ICalculator. Aplikasi klien ini kemudian dikonstruksi dengan mengonstruksi instans ClientCalculator.

Biasanya ini adalah praktik terbaik untuk menentukan informasi pengikatan dan alamat secara deklaratif dalam konfigurasi daripada secara imperatif dalam kode. Menentukan titik akhir dalam kode biasanya tidak praktis karena pengikatan dan alamat untuk layanan yang disebarkan biasanya berbeda dari yang digunakan saat layanan sedang dikembangkan. Lebih umumnya, menjaga informasi pengikatan dan alamat keluar dari kode memungkinkan titik akhit untuk berubah tanpa harus mengompilasi ulang atau menyebarkan ulang aplikasi.

Anda dapat melakukan semua langkah konfigurasi berikut dengan menggunakan Alat Editor Konfigurasi (SvcConfigEditor.exe).

Untuk salinan sumber contoh ini, lihat sampel BasicBinding.

Menentukan pengikatan klien dalam konfigurasi

  1. Gunakan Svcutil.exe dari baris perintah untuk menghasilkan kode dari metadata layanan.

    Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
    
  2. Klien yang dihasilkan berisi antarmuka ICalculator yang menentukan kontrak layanan yang harus dipenuhi oleh implementasi klien.

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace="http://Microsoft.ServiceModel.Samples", ConfigurationName="Microsoft.ServiceModel.Samples.ICalculator")]
    public interface ICalculator
    {
    
        [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
        double Add(double n1, double n2);
    
        [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
        double Subtract(double n1, double n2);
    
        [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
        double Multiply(double n1, double n2);
    
        [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
        double Divide(double n1, double n2);
    }
    
    [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);
    }
    
    
  3. Klien yang dihasilkan juga berisi implementasi ClientCalculator.

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    public partial 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, System.ServiceModel.EndpointAddress remoteAddress) :
                base(endpointConfigurationName, remoteAddress)
        {
        }
    
        public CalculatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.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 CalculatorService : ICalculator
    {
       public double Add(double n1, double n2)
       {
          return n1 + n2;
       }
       public double Subtract(double n1, double n2)
       {
          return n1 - n2;
       }
       public double Multiply(double n1, double n2)
       {
          return n1 * n2;
       }
       public double Divide(double n1, double n2)
       {
          return n1 / n2;
       }
    }
    
    
  4. Svcutil.exe juga menghasilkan konfigurasi untuk klien yang menggunakan kelas BasicHttpBinding. Saat menggunakan Visual Studio, beri nama file ini App.config. Perhatikan bahwa alamat dan informasi pengikatan tidak ditentukan di mana pun di dalam implementasi layanan. Selain itu, kode tidak harus ditulis untuk mengambil informasi tersebut dari file konfigurasi.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
    
        <client>
          <endpoint 
              name=""
              address="http://localhost/servicemodelsamples/service.svc" 
              binding="basicHttpBinding" 
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
        </client>
    
        <bindings>
          <basicHttpBinding/>
        </bindings>
    
      </system.serviceModel>
    
    </configuration>
    
  5. Membuat instans ClientCalculator dalam aplikasi lalu memanggil operasi layanan.

    
    using System;
    using System.ServiceModel;
    
    namespace Microsoft.ServiceModel.Samples
    {
    
        //Client implementation code.
        class Client
        {
            static void Main()
            {
                // Create a client with given client endpoint configuration
                CalculatorClient client = new CalculatorClient();
    
                // 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();
            }
        }
    }
    
    
  6. Membangun dan menjalankan klien.

Lihat juga