Delen via


Procedure: Een servicebinding opgeven in configuratie

In dit voorbeeld wordt een ICalculator contract gedefinieerd voor een eenvoudige rekenmachineservice, wordt de service geïmplementeerd in de CalculatorService klasse en wordt het eindpunt vervolgens geconfigureerd in het web.config-bestand, waar wordt opgegeven dat de service gebruikmaakt van de BasicHttpBinding. Zie Een servicebinding opgeven in code voor een beschrijving van het configureren van deze service met behulp van code in plaats van een configuratie.

Het is meestal de aanbevolen procedure om de bindings- en adresgegevens declaratief op te geven in de configuratie in plaats van imperatief in code. Het definiëren van eindpunten in code is meestal niet praktisch omdat de bindingen en adressen voor een geïmplementeerde service doorgaans afwijken van de bindingen en adressen die worden gebruikt terwijl de service wordt ontwikkeld. Over het algemeen kunnen ze de bindings- en adresseringsgegevens buiten de code houden zonder de toepassing opnieuw te hoeven compileren of opnieuw te implementeren.

Alle volgende configuratiestappen kunnen worden uitgevoerd met behulp van het hulpprogramma Configuration Editor (SvcConfigEditor.exe).

Zie BasicBinding voor de bronkopie van dit voorbeeld.

De BasicHttpBinding opgeven die moet worden gebruikt om de service te configureren

  1. Definieer een servicecontract voor het type service.

    [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. Implementeer het servicecontract in een serviceklasse.

    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
    
    

    Notitie

    Adres- of bindingsgegevens worden niet opgegeven in de implementatie van de service. Code hoeft ook niet te worden geschreven om die informatie op te halen uit het configuratiebestand.

  3. Maak een Web.config-bestand om een eindpunt te configureren voor het CalculatorService eindpunt dat gebruikmaakt van .WSHttpBinding

    <?xml version="1.0" encoding="utf-8" ?>  
    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name=" CalculatorService" >  
    
            <!-- Leave the address blank to be populated by default -->
            <!-- from the hosting environment,in this case IIS, so -->
            <!-- the address will just be that of the IIS Virtual -->
            <!-- Directory. -->
    
            <!-- Specify the binding configuration name for that -->
            <!-- binding type. This is optional but useful if you -->
            <!-- want to modify the properties of the binding. -->
            <!-- The bindingConfiguration name Binding1 is defined -->
            <!-- below in the bindings element. -->
            <endpoint
                address=""
                binding="wsHttpBinding"  
                bindingConfiguration="Binding1"  
                contract="ICalculator" />  
          </service>  
        </services>  
        <bindings>  
          <wsHttpBinding>  
            <binding name="Binding1">  
              <!-- Binding property values can be modified here. -->  
              <!-- See the next procedure. -->  
            </binding>  
          </wsHttpBinding>  
       </bindings>  
      </system.serviceModel>  
    </configuration>  
    
  4. Maak een Service.svc-bestand dat de volgende regel bevat en plaats het in de virtuele map van Internet Information Services (IIS).

    <%@ServiceHost language=c# Service="CalculatorService" %>
    

De standaardwaarden van de bindingseigenschappen wijzigen

  1. Als u een van de standaardeigenschapswaarden van de WSHttpBindingeigenschap wilt wijzigen, maakt u een nieuwe naam voor de binding- <binding name="Binding1"> binnen het <element wsHttpBinding> en stelt u de nieuwe waarden in voor de kenmerken van de binding in dit bindingselement. Als u bijvoorbeeld de standaardwaarden voor openen en sluiten van 1 minuut wilt wijzigen in 2 minuten, voegt u het volgende toe aan het configuratiebestand.

    <wsHttpBinding>  
      <binding name="Binding1"  
               closeTimeout="00:02:00"  
               openTimeout="00:02:00">  
      </binding>  
    </wsHttpBinding>  
    

Zie ook