Aracılığıyla paylaş


Nasıl yapılır: Yapılandırmada İstemci Bağlama Belirtme

Bu örnekte, hesap makinesi hizmetini kullanmak için bir istemci konsol uygulaması oluşturulur ve bu istemcinin bağlaması yapılandırmada bildirimli olarak belirtilir. İstemci arabirimini CalculatorServiceuygulayan öğesine erişir ICalculator ve hem hizmet hem de istemci sınıfını BasicHttpBinding kullanır.

Özetlenen yordamda hesap makinesi hizmetinin çalıştığı varsayılır. Hizmetin nasıl derleneceğini öğrenmek için bkz . Nasıl yapılır: Yapılandırmada Hizmet Bağlaması Belirtme. Ayrıca Windows Communication Foundation'ın (WCF) istemci bileşenlerini otomatik olarak oluşturmak için sağladığı ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanır. Araç, hizmete erişmek için istemci kodunu ve yapılandırmasını oluşturur.

İstemci iki bölümde derlenir. Svcutil.exe arabirimini ClientCalculator uygulayan öğesini ICalculator oluşturur. Bu istemci uygulaması daha sonra bir örneği ClientCalculatoroluşturarak oluşturulur.

Bağlama ve adres bilgilerini kodda kesinlik temelli olarak değil, yapılandırmada bildirim temelli olarak belirtmek genellikle en iyi yöntemdir. Dağıtılan bir hizmetin bağlamaları ve adresleri genellikle hizmet geliştirilirken kullanılanlardan farklı olduğundan, kodda uç noktaları tanımlamak genellikle pratik değildir. Daha genel olarak bağlama ve adresleme bilgilerinin kod dışında tutulması, uygulamanın yeniden derlenmesine veya yeniden dağıtılmasına gerek kalmadan bunların değişmesine olanak tanır.

Yapılandırma Düzenleyicisi Aracı'nı (SvcConfigEditor.exe) kullanarak aşağıdaki yapılandırma adımlarının tümünü gerçekleştirebilirsiniz.

Bu örneğin kaynak kopyası için BasicBinding örneğine bakın.

Yapılandırmada istemci bağlaması belirtme

  1. Hizmet meta verilerinden kod oluşturmak için komut satırından Svcutil.exe kullanın.

    Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
    
  2. Oluşturulan istemci, istemci uygulamasının karşılaması ICalculator gereken hizmet sözleşmesini tanımlayan arabirimi içerir.

    [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. Oluşturulan istemci, uygulamasını ClientCalculatorda içerir.

    [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, sınıfını kullanan istemci için yapılandırmayı BasicHttpBinding da oluşturur. Visual Studio kullanırken bu dosyayı App.config olarak adlandırın. Adres ve bağlama bilgilerinin hizmetin uygulanması içinde herhangi bir yerde belirtilmediğini unutmayın. Ayrıca, yapılandırma dosyasından bu bilgileri almak için kodun yazılması gerekmez.

    <?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. Bir uygulamada öğesinin ClientCalculator bir örneğini oluşturun ve ardından hizmet işlemlerini çağırın.

    
    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. İstemciyi derleyin ve çalıştırın.

Ayrıca bkz.