Vorgehensweise: Angeben einer Clientbindung in einer KonfigurationHow to: Specify a Client Binding in Configuration

In diesem Beispiel wird eine Client-Konsolenanwendung erstellt, um einen Rechnerdienst zu nutzen, und die Bindung dieses Clients wird deklarativ in der Konfiguration angegeben.In this example, a client console application is created to use a calculator service, and the binding for that client is specified declaratively in configuration. Der Client greift auf den CalculatorService zu, der die ICalculator-Schnittstelle implementiert, und sowohl der Dienst als auch der Client verwenden die Klasse BasicHttpBinding.The client accesses the CalculatorService, which implements the ICalculator interface, and both the service and the client use the BasicHttpBinding class.

In der umrissenen Prozedur wird davon ausgegangen, dass der Rechnerdienst ausgeführt wird.The procedure outlined assumes that the calculator service is running. Informationen zum Erstellen des Diensts finden Sie unter wie: Angeben einer Dienstbindung in einer Konfiguration.For information about how to build the service, see How to: Specify a Service Binding in Configuration. Darüber hinaus verwendet der ServiceModel Metadata Utility Tool (Svcutil.exe) , dass Windows Communication Foundation (WCF) bereitstellt, um die Clientkomponenten automatisch zu generieren.It also uses the ServiceModel Metadata Utility Tool (Svcutil.exe) that Windows Communication Foundation (WCF) provides to automatically generate the client components. Das Tool generiert den Clientcode und die Konfiguration zum Zugreifen auf den Dienst.The tool generates the client code and configuration for accessing the service.

Der Client wird in zwei Schritten erstellt.The client is built in two parts. Svcutil.exe generiert den ClientCalculator, der die ICalculator-Schnittstelle implementiert.Svcutil.exe generates the ClientCalculator that implements the ICalculator interface. Diese Clientanwendung wird dann durch das Erstellen einer Instanz von ClientCalculator erstellt.This client application is then constructed by constructing an instance of ClientCalculator.

Normalerweise ist es die bewährte Methode, die Bindung anzugeben und die Informationen deklarativ in der Konfiguration anzusprechen anstatt imperativ im Code.It is usually the best practice to specify the binding and address information declaratively in configuration rather than imperatively in code. Die Definition von Endpunkten im Code ist normalerweise nicht geeignet, da die Bindungen und Adressen für einen bereitgestellten Dienst sich in der Regel von denen unterscheiden, die während der Entwicklung des Diensts verwendet werden.Defining endpoints in code is usually not practical because the bindings and addresses for a deployed service are typically different from those used while the service is being developed. Allgemeiner gesagt ist es durch die Trennung von Bindungs- und Adressierungsinformationen vom Code möglich, diese zu ändern, ohne die Anwendung neu kompilieren oder erneut bereitstellen zu müssen.More generally, keeping the binding and addressing information out of the code allows them to change without having to recompile or redeploy the application.

Sie können alle der folgenden Konfigurationsschritte ausführen, mit der Dienstkonfigurations-Editor-Tool (SvcConfigEditor.exe).You can perform all of the following configuration steps by using the Configuration Editor Tool (SvcConfigEditor.exe).

Eine Kopie der Quelle dieses Beispiels, finden Sie unter der Standardbindung Beispiel.For the source copy of this example, see the BasicBinding sample.

Eine Clientbindung in einer Konfiguration angebenSpecifying a client binding in configuration

  1. Verwenden Sie Svcutil.exe in der Befehlszeile, um Code von Dienstmetadaten zu generieren.Use Svcutil.exe from the command line to generate code from service metadata.

    Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>   
    
  2. Der generierte Client enthält die ICalculator-Schnittstelle, die den Dienstvertrag definiert, dem die Clientimplementierung entsprechen muss.The client that is generated contains the ICalculator interface that defines the service contract that the client implementation must satisfy.

    [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. Der generierte Client enthält außerdem die Implementierung vom ClientCalculator.The generated client also contains the implementation of the 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 generiert auch die Konfiguration für den Client, der die BasicHttpBinding-Klasse verwendet.Svcutil.exe also generates the configuration for the client that uses the BasicHttpBinding class. Wenn Sie Visual Studio verwenden möchten, nennen Sie diese Datei "App.config". Beachten Sie, dass die Adresse und die Bindungsinformationen in der Implementierung des Diensts nirgendwo angegeben werden.When using Visual Studio, name this file App.config. Note that the address and binding information are not specified anywhere inside the implementation of the service. Es muss auch kein Code geschrieben werden, um Informationen aus der Konfigurationsdatei abzurufen.Also, code does not have to be written to retrieve that information from the configuration file.

    <?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. Erstellen Sie eine Instanz des ClientCalculator in einer Anwendung, und rufen Sie dann die Dienstvorgänge auf.Create an instance of the ClientCalculator in an application, and then call the service operations.

    
    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. Kompilieren Sie den Code, und führen Sie den Client aus.Compile and run the client.

Siehe auchSee Also

Verwenden von Bindungen, um Dienste und Clients zu konfigurierenUsing Bindings to Configure Services and Clients