Dela via


Konfigurera bindningar för Windows Communication Foundation Services

När du skapar ett program vill du ofta skjuta upp beslut till administratören efter distributionen av programmet. Det finns till exempel ofta inget sätt att veta i förväg vad en tjänstadress eller URI (Uniform Resource Identifier) kommer att vara. I stället för att hårdkoda en adress är det bättre att låta en administratör göra det när en tjänst har skapats. Den här flexibiliteten uppnås genom konfiguration.

Kommentar

Använd verktyget ServiceModel Metadata Utility (Svcutil.exe) med växeln /config för att snabbt skapa konfigurationsfiler.

Huvudavsnitt

Konfigurationsschemat för Windows Communication Foundation (WCF) innehåller följande tre huvudavsnitt (serviceModel, bindingsoch services):

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

ServiceModel-element

Du kan använda avsnittet som avgränsas av -elementet system.ServiceModel för att konfigurera en tjänsttyp med en eller flera slutpunkter, samt inställningar för en tjänst. Varje slutpunkt kan sedan konfigureras med en adress, ett kontrakt och en bindning. Mer information om slutpunkter finns i Översikt över att skapa slutpunkter. Om inga slutpunkter anges lägger körningen till standardslutpunkter. Mer information om standardslutpunkter, bindningar och beteenden finns i Förenklad konfiguration och förenklad konfiguration för WCF-tjänster.

En bindning anger transporter (HTTP, TCP, pipes, Message Queuing) och protokoll (Säkerhet, Tillförlitlighet, Transaktionsflöden) och består av bindningselement, som var och en anger en aspekt av hur en slutpunkt kommunicerar med världen.

Om du till exempel anger elementet <basicHttpBinding> anger du att HTTP ska användas som transport för en slutpunkt. Detta används för att koppla slutpunkten vid körning när tjänsten som använder den här slutpunkten öppnas.

Det finns två typer av bindningar: fördefinierade och anpassade. Fördefinierade bindningar innehåller användbara kombinationer av element som används i vanliga scenarier. En lista över fördefinierade bindningstyper som tillhandahålls av WCF finns i System-provided Bindings (System-tillhandahållna bindningar). Om ingen fördefinierad bindningssamling har rätt kombination av funktioner som ett tjänstprogram behöver, kan du skapa anpassade bindningar för att uppfylla programmets krav. Mer information om anpassade bindningar finns i customBinding>.<

Följande fyra exempel illustrerar de vanligaste bindningskonfigurationerna som används för att konfigurera en WCF-tjänst.

Ange en slutpunkt som ska använda en bindningstyp

Det första exemplet visar hur du anger en slutpunkt som konfigurerats med en adress, ett kontrakt och en bindning.

<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>  

I det här exemplet name anger attributet vilken tjänsttyp konfigurationen är till för. När du skapar en tjänst i koden med kontraktet initieras den HelloWorld med alla slutpunkter som definierats i exempelkonfigurationen. Om sammansättningen bara implementerar ett tjänstkontrakt name kan attributet utelämnas eftersom tjänsten använder den enda tillgängliga typen. Attributet tar en sträng som måste vara i formatet Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Attributet address anger den URI som andra slutpunkter använder för att kommunicera med tjänsten. URI:n kan vara antingen en absolut eller relativ sökväg. Om en relativ adress anges förväntas värden ange en basadress som är lämplig för det transportschema som används i bindningen. Om en adress inte har konfigurerats antas basadressen vara adressen för slutpunkten.

Attributet contract anger vilket kontrakt den här slutpunkten exponeras för. Tjänstimplementeringstypen måste implementera kontraktstypen. Om en tjänstimplementering implementerar en enda kontraktstyp kan den här egenskapen utelämnas.

Attributet binding väljer en fördefinierad eller anpassad bindning som ska användas för den här specifika slutpunkten. En slutpunkt som inte uttryckligen väljer en bindning använder standardbindningsvalet, som är BasicHttpBinding.

Ändra en fördefinierad bindning

I följande exempel ändras en fördefinierad bindning. Den kan sedan användas för att konfigurera valfri slutpunkt i tjänsten. Bindningen ändras genom att värdet anges ReceiveTimeout till 1 sekund. Observera att egenskapen returnerar ett TimeSpan objekt.

Den ändrade bindningen finns i avsnittet bindningar. Den här ändrade bindningen kan nu användas när du skapar en slutpunkt genom att ange binding attributet i elementet endpoint .

Kommentar

Om du ger bindningen ett visst namn måste den bindingConfiguration som anges i tjänstslutpunkten matcha med den.

<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>  

Konfigurera ett beteende för att tillämpa på en tjänst

I följande exempel konfigureras ett specifikt beteende för tjänsttypen. Elementet ServiceMetadataBehavior används för att göra det möjligt för ServiceModel Metadata Utility Tool (Svcutil.exe) att köra frågor mot tjänsten och generera WSDL-dokument (Web Services Description Language) från metadata.

Kommentar

Om du ger beteendet ett visst namn måste det behaviorConfiguration som anges i avsnittet tjänst eller slutpunkt matcha det.

<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>  

Den föregående konfigurationen gör det möjligt för en klient att anropa och hämta metadata för den "HelloWorld"-typerade tjänsten.

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

Ange en tjänst med två slutpunkter med olika bindningsvärden

I det sista exemplet konfigureras två slutpunkter för HelloWorld tjänsttypen. Varje slutpunkt använder ett annat anpassat bindingConfiguration attribut av samma bindningstyp (var och en ändrar 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>  

Du kan få samma beteende med hjälp av standardkonfigurationen genom att lägga till ett protocolMapping avsnitt och konfigurera bindningarna enligt vad som visas i följande exempel.

<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>  

Se även