Gewusst wie: Erstellen eines Dienstendpunkts im CodeHow to: Create a Service Endpoint in Code

In diesem Beispiel wird ein ICalculator-Vertrag für einen Rechnerdienst definiert, der Dienst wird in der CalculatorService-Klasse implementiert, und der Endpunkt wird im Code definiert. Dort ist angegeben, dass die BasicHttpBinding-Klasse vom Dienst verwendet werden muss.In this example, an ICalculator contract is defined for a calculator service, the service is implemented in the CalculatorService class, and then its endpoint is defined in code, where it is specified that the service must use the BasicHttpBinding class.

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.

So erstellen Sie einen Dienstendpunkt im CodeTo create a service endpoint in code

  1. Erstellen Sie die die Schnittstelle, die den Dienstvertrag definiert.Create the interface that defines the service contract.

    [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
    
    
  2. Implementieren Sie den in Schritt 1 definierten Dienstvertrag.Implement the service contract defined in step 1.

    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;
       }
    } 
    
    
    Public Class CalculatorService
        Implements ICalculator
    
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function
    
        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function
    
        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function
    
        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    
    End Class
    
    
  3. Erstellen Sie in der Hostanwendung eine Basisadresse für den Dienst und die Bindung, die für den Dienst verwendet werden soll.In the hosting application, create the base address for the service and the binding to be used with the service.

    
    // Specify a base address for the service
    
    String baseAddress = "http://localhost/CalculatorService";
    // Create the binding to be used by the service.
    
    BasicHttpBinding binding1 = new BasicHttpBinding();
    
    
    ' Specify a base address for the service
    Dim baseAddress = "http://localhost/CalculatorService"
    ' Create the binding to be used by the service.
    
    Dim binding1 As New BasicHttpBinding()
    
  4. Erstellen Sie den Host, und rufen Sie AddServiceEndpoint(Type, Binding, String) oder eine der anderen Überladungen auf, um den Dienstendpunkt dem Host hinzuzufügen.Create the host and call AddServiceEndpoint(Type, Binding, String) or one of the other overloads to add the service endpoint for the host.

    
    using(ServiceHost host = new ServiceHost(typeof(CalculatorService)))
    {
        host.AddServiceEndpoint(typeof(ICalculator),binding1, baseAddress);
    
    
    
    Using host As New ServiceHost(GetType(CalculatorService))
        With host
            .AddServiceEndpoint(GetType(ICalculator), _
                                    binding1, _
                                    baseAddress)
    
    

    Übergeben Sie beim Erstellen des ServiceHost die Basisadresse an den Konstruktor, und rufen Sie nicht AddServiceEndpoint auf, um die Bindung im Code anzugeben, aber dabei die Standardendpunkte der Runtime zu verwenden.To specify the binding in code, but to use the default endpoints provided by the runtime, pass the bass address into constructor when creating the ServiceHost, and do not call AddServiceEndpoint.

    ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri(baseAddress));
    
    Dim host As New ServiceHost(GetType(CalculatorService), New Uri(baseAddress))
    

    Weitere Informationen zu Standardendpunkte, finden Sie unter vereinfachte Konfiguration und vereinfachte Konfiguration für WCF-Dienste.For more information about default endpoints, see Simplified Configuration and Simplified Configuration for WCF Services.

Siehe auchSee Also

Vorgehensweise: Angeben einer Dienstbindung im CodeHow to: Specify a Service Binding in Code