Delen via


Bindingen configureren voor Windows Communication Foundation Services

Bij het maken van een toepassing wilt u vaak beslissingen aan de beheerder uitstellen na de implementatie van de toepassing. Er is bijvoorbeeld vaak geen manier om vooraf te weten wat een serviceadres of URI (Uniform Resource Identifier) is. In plaats van een adres hard te coderen, is het beter om een beheerder dit te laten doen na het maken van een service. Deze flexibiliteit wordt bereikt via configuratie.

Notitie

Gebruik het hulpprogramma hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) met de /config schakeloptie om snel configuratiebestanden te maken.

Hoofdsecties

Het WCF-configuratieschema (Windows Communication Foundation) bevat de volgende drie hoofdsecties (serviceModel, bindingsen services):

<configuration>  
    <system.serviceModel>  
        <bindings>  
        </bindings>  
        <services>  
        </services>  
        <behaviors>  
        </behaviors>  
    </system.serviceModel>  
</configuration>  

ServiceModel-elementen

U kunt de sectie die is gebonden door het system.ServiceModel element gebruiken om een servicetype te configureren met een of meer eindpunten, evenals instellingen voor een service. Elk eindpunt kan vervolgens worden geconfigureerd met een adres, een contract en een binding. Zie Overzicht van het maken van eindpunten voor meer informatie over eindpunten. Als er geen eindpunten zijn opgegeven, voegt de runtime standaardeindpunten toe. Zie Vereenvoudigde configuratie en vereenvoudigde configuratie voor WCF-services voor meer informatie over standaardeindpunten, bindingen en gedrag.

Een binding bevat transporten (HTTP, TCP, pipes, Message Queuing) en protocollen (Beveiliging, Betrouwbaarheid, Transactiestromen) en bestaat uit bindingselementen, die elk een aspect aangeven van de communicatie tussen een eindpunt en de wereld.

Als u bijvoorbeeld het <basicHttpBinding-element> opgeeft, wordt aangegeven dat HTTP moet worden gebruikt als het transport voor een eindpunt. Dit wordt gebruikt om het eindpunt tijdens runtime te verbinden wanneer de service die dit eindpunt gebruikt, wordt geopend.

Er zijn twee soorten bindingen: vooraf gedefinieerd en aangepast. Vooraf gedefinieerde bindingen bevatten nuttige combinaties van elementen die in algemene scenario's worden gebruikt. Zie Door het systeem verstrekte bindingen voor een lijst met vooraf gedefinieerde bindingstypen die WCF biedt. Als er geen vooraf gedefinieerde bindingverzameling de juiste combinatie heeft van functies die een servicetoepassing nodig heeft, kunt u aangepaste bindingen maken om te voldoen aan de vereisten van de toepassing. Zie customBinding voor meer informatie over aangepaste bindingen<.>

In de volgende vier voorbeelden ziet u de meest voorkomende bindingsconfiguraties die worden gebruikt voor het instellen van een WCF-service.

Een eindpunt opgeven voor het gebruik van een bindingstype

In het eerste voorbeeld ziet u hoe u een eindpunt opgeeft dat is geconfigureerd met een adres, een contract en een binding.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <!-- This section is optional with the default configuration introduced  
       in .NET Framework 4. -->  
  <endpoint
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  

In dit voorbeeld geeft het name kenmerk aan voor welk servicetype de configuratie is bedoeld. Wanneer u een service maakt in uw code met het HelloWorld contract, wordt deze geïnitialiseerd met alle eindpunten die zijn gedefinieerd in de voorbeeldconfiguratie. Als de assembly slechts één servicecontract implementeert, kan het name kenmerk worden weggelaten omdat de service het enige beschikbare type gebruikt. Het kenmerk heeft een tekenreeks, die de indeling moet hebben Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Het address kenmerk geeft de URI op die andere eindpunten gebruiken om te communiceren met de service. De URI kan een absoluut of relatief pad zijn. Als er een relatief adres wordt opgegeven, moet de host naar verwachting een basisadres opgeven dat geschikt is voor het transportschema dat in de binding wordt gebruikt. Als een adres niet is geconfigureerd, wordt ervan uitgegaan dat het basisadres het adres voor dat eindpunt is.

Het contract kenmerk geeft het contract aan dat dit eindpunt beschikbaar is. Het type service-implementatie moet het contracttype implementeren. Als een service-implementatie één contracttype implementeert, kan deze eigenschap worden weggelaten.

Het binding kenmerk selecteert een vooraf gedefinieerde of aangepaste binding die moet worden gebruikt voor dit specifieke eindpunt. Een eindpunt dat niet expliciet een binding selecteert, maakt gebruik van de standaardbindingsselectie.BasicHttpBinding

Een vooraf gedefinieerde binding wijzigen

In het volgende voorbeeld wordt een vooraf gedefinieerde binding gewijzigd. Deze kan vervolgens worden gebruikt om elk eindpunt in de service te configureren. De binding wordt gewijzigd door de ReceiveTimeout waarde in te stellen op 1 seconde. Houd er rekening mee dat de eigenschap een TimeSpan object retourneert.

Deze gewijzigde binding vindt u in de sectie Bindingen. Deze gewijzigde binding kan nu worden gebruikt bij het maken van een eindpunt door het binding kenmerk in het element in te endpoint stellen.

Notitie

Als u een bepaalde naam aan de binding geeft, moet het bindingConfiguration opgegeven in het service-eindpunt overeenkomen met de binding.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <endpoint
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  
<bindings>  
    <basicHttpBinding
        receiveTimeout="00:00:01"  
    />  
</bindings>  

Een gedrag configureren om toe te passen op een service

In het volgende voorbeeld wordt een specifiek gedrag geconfigureerd voor het servicetype. Het ServiceMetadataBehavior element wordt gebruikt om het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) in te schakelen om een query uit te voeren op de service en WSDL-documenten (Web Services Description Language) te genereren op basis van de metagegevens.

Notitie

Als u een bepaalde naam aan het gedrag geeft, moet de behaviorConfiguration opgegeven in de sectie service of eindpunt overeenkomen.

<behaviors>  
    <behavior>  
        <ServiceMetadata httpGetEnabled="true" />
    </behavior>  
</behaviors>  
<services>  
    <service
       name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
       <endpoint
          address="http://computer:8080/Hello"  
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
          binding="basicHttpBinding" />
    </service>  
</services>  

Met de voorgaande configuratie kan een client de metagegevens van de getypte 'HelloWorld'-service aanroepen en ophalen.

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

Een service met twee eindpunten opgeven met behulp van verschillende bindingswaarden

In dit laatste voorbeeld worden twee eindpunten geconfigureerd voor het HelloWorld servicetype. Elk eindpunt maakt gebruik van een ander aangepast bindingConfiguration kenmerk van hetzelfde bindingstype (elk wijzigt het basicHttpBinding).

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
    <endpoint  
        address="http://computer:8080/Hello1"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="shortTimeout" />
    <endpoint  
        address="http://computer:8080/Hello2"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="Secure" />
</service>  
<bindings>  
    <basicHttpBinding
        name="shortTimeout"  
        timeout="00:00:00:01"
     />  
     <basicHttpBinding
        name="Secure">  
        <Security mode="Transport" />  
     </basicHttpBinding>
</bindings>  

U kunt hetzelfde gedrag krijgen met behulp van de standaardconfiguratie door een protocolMapping sectie toe te voegen en de bindingen te configureren, zoals wordt weergegeven in het volgende voorbeeld.

<protocolMapping>  
    <add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />  
    <add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />  
</protocolMapping>  
<bindings>  
    <basicHttpBinding
        name="shortTimeout"  
        timeout="00:00:00:01"
     />  
     <basicHttpBinding
        name="Secure" />  
        <Security mode="Transport" />  
</bindings>  

Zie ook