Dela via


Konfigurera tjänster med hjälp av konfigurationsfiler

Genom att konfigurera en WCF-tjänst (Windows Communication Foundation) med en konfigurationsfil får du flexibiliteten att tillhandahålla data om slutpunkts- och tjänstbeteende vid tidpunkten för distributionen i stället för vid designtillfället. Det här avsnittet beskriver de primära tillgängliga teknikerna.

En WCF-tjänst kan konfigureras med hjälp av .NET Framework-konfigurationstekniken. Oftast läggs XML-element till i web.config-filen för en IIS-webbplats (Internet Information Services) som är värd för en WCF-tjänst. Med elementen kan du ändra information, till exempel slutpunktsadresserna (de faktiska adresser som används för att kommunicera med tjänsten) på maskin-för-dator-basis. Dessutom innehåller WCF flera systembaserade element som gör att du snabbt kan välja de mest grundläggande funktionerna för en tjänst. Från och med .NET Framework 4 levereras WCF med en ny standardkonfigurationsmodell som förenklar WCF-konfigurationskraven. Om du inte tillhandahåller någon WCF-konfiguration för en viss tjänst konfigurerar körningen automatiskt din tjänst med vissa standardslutpunkter och standardbindning/beteende. I praktiken är skrivkonfiguration en viktig del av programmeringen av WCF-program.

Mer information finns i Konfigurera bindningar för tjänster. En lista över de vanligaste elementen finns i Bindningar som tillhandahålls av systemet. Mer information om standardslutpunkter, bindningar och beteenden finns i Förenklad konfiguration och förenklad konfiguration för WCF-tjänster.

Viktigt!

När du distribuerar scenarier sida vid sida där två olika versioner av en tjänst distribueras måste du ange partiella namn på sammansättningar som refereras till i konfigurationsfiler. Det beror på att konfigurationsfilen delas mellan alla versioner av en tjänst och att de kan köras under olika versioner av .NET Framework.

System.Configuration: Web.config och App.config

WCF använder konfigurationssystemet System.Configuration i .NET Framework.

När du konfigurerar en tjänst i Visual Studio använder du antingen en Web.config-fil eller en App.config-fil för att ange inställningarna. Valet av namn på konfigurationsfilen bestäms av den värdmiljö som du väljer för tjänsten. Om du använder IIS som värd för din tjänst använder du en Web.config-fil. Om du använder någon annan värdmiljö använder du en App.config-fil.

I Visual Studio används filen med namnet App.config för att skapa den slutliga konfigurationsfilen. Det slutliga namnet som faktiskt används för konfigurationen beror på sammansättningsnamnet. En sammansättning med namnet "Cohowinery.exe" har till exempel ett slutligt konfigurationsfilnamn för "Cohowinery.exe.config". Du behöver dock bara ändra filen App.config. Ändringar som görs i filen görs automatiskt i den slutliga programkonfigurationsfilen vid kompileringstillfället.

När du använder en App.config sammanfogar konfigurationssystemet filen App.config med innehållet i filen Machine.config när programmet startas och konfigurationen tillämpas. Den här mekanismen gör att datoromfattande inställningar kan definieras i filen Machine.config. Filen App.config kan användas för att åsidosätta inställningarna för filen Machine.config. Du kan också låsa inställningarna i filen Machine.config så att de används. I web.config-fallet sammanfogar konfigurationssystemet Web.config-filerna i alla kataloger som leder fram till programkatalogen till den konfiguration som tillämpas. Mer information om konfiguration och inställningsprioriteringar finns i avsnitten System.Configuration i namnområdet.

Större delar av konfigurationsfilen

Huvudavsnitten i konfigurationsfilen innehåller följande element.

<system.ServiceModel>

   <services>
   <!-- Define the service endpoints. This section is optional in the new
    default configuration model in .NET Framework 4. -->
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!-- Specify one or more of the system-provided binding elements,
    for example, <basicHttpBinding> -->
   <!-- Alternatively, <customBinding> elements. -->
      <binding>
      <!-- For example, a <BasicHttpBinding> element. -->
      </binding>
   </bindings>

   <behaviors>
   <!-- One or more of the system-provided or custom behavior elements. -->
      <behavior>
      <!-- For example, a <throttling> element. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

Kommentar

Avsnitten bindningar och beteenden är valfria och ingår endast om det behövs.

Tjänstelementet <>

Elementet services innehåller specifikationerna för alla tjänster som programvärdarna har. Från och med den förenklade konfigurationsmodellen i .NET Framework 4 är det här avsnittet valfritt.

<tjänster>

Tjänstelementet <>

Varje tjänst har följande attribut:

  • name. Anger vilken typ som tillhandahåller en implementering av ett tjänstkontrakt. Det här är ett fullständigt kvalificerat namn som består av namnområdet, en punkt och sedan typnamnet. Till exempel "MyNameSpace.myServiceType".

  • behaviorConfiguration. Anger namnet på ett av elementen behavior som finns i elementet behaviors . Det angivna beteendet styr åtgärder, till exempel om tjänsten tillåter personifiering. Om dess värde är det tomma namnet eller nej behaviorConfiguration anges läggs standarduppsättningen med tjänstbeteenden till i tjänsten.

  • <tjänst>

Slutpunktselementet <>

Varje slutpunkt kräver en adress, en bindning och ett kontrakt som representeras av följande attribut:

  • address. Anger tjänstens URI (Uniform Resource Identifier), som kan vara en absolut adress eller en som anges i förhållande till tjänstens basadress. Om den är inställd på en tom sträng anger den att slutpunkten är tillgänglig på den basadress som anges när du skapar ServiceHost för tjänsten.

  • binding. Anger vanligtvis en systembaserad bindning som WSHttpBinding, men kan också ange en användardefinierad bindning. Den angivna bindningen avgör vilken typ av transport, säkerhet och kodning som används och om tillförlitliga sessioner, transaktioner eller direktuppspelning stöds eller aktiveras.

  • bindingConfiguration. Om standardvärdena för en bindning måste ändras kan detta göras genom att konfigurera lämpligt binding element i elementet bindings . Det här attributet ska ges samma värde som name attributet för binding det element som används för att ändra standardvärdena. Om inget namn anges, eller om inget bindingConfiguration anges i bindningen, används standardbindningen av bindningstypen i slutpunkten.

  • contract. Anger det gränssnitt som definierar kontraktet. Det här är gränssnittet som implementeras i clr-typen (Common Language Runtime) som anges av name elementets service attribut.

  • <Slutpunkt>

Bindningselementet <>

Elementet bindings innehåller specifikationerna för alla bindningar som kan användas av valfri slutpunkt som definieras i valfri tjänst.

<Bindningar>

Bindningselementet <>

Elementen binding i elementet bindings kan antingen vara en av de systembaserade bindningarna (se System-Provided Bindings) eller en anpassad bindning (se Anpassade bindningar). Elementet binding har ett name attribut som korrelerar bindningen med slutpunkten som anges i bindingConfiguration elementets endpoint attribut. Om inget namn anges motsvarar bindningen standardvärdet för den bindningstypen.

Mer information om hur du konfigurerar tjänster och klienter finns i Konfigurera WCF-tjänster.

<bindande>

Beteendeelementet <>

Det här är ett containerelement för de behavior element som definierar beteendet för en tjänst.

<Beteenden>

Beteendeelementet <>

Varje behavior element identifieras av ett name attribut och tillhandahåller antingen ett systembaserat beteende, till exempel <throttling>, eller ett anpassat beteende. Om inget namn anges motsvarar beteendeelementet standardtjänsten eller slutpunktsbeteendet.

<uppförande>

Använda bindnings- och beteendekonfigurationer

WCF gör det enkelt att dela konfigurationer mellan slutpunkter med hjälp av ett referenssystem i konfigurationen. I stället för att direkt tilldela konfigurationsvärden till en slutpunkt grupperas bindningsrelaterade konfigurationsvärden i bindingConfiguration element i <binding> avsnittet. En bindningskonfiguration är en namngiven grupp med inställningar för en bindning. Slutpunkter kan sedan referera till efter bindingConfiguration namn.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.serviceModel>
  <bindings>
    <basicHttpBinding>
     <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
     <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
     <binding closeTimeout="00:03:00" />  <!-- Default binding for basicHttpBinding -->
    </basicHttpBinding>
     </bindings>
     <services>
      <service name="MyNamespace.myServiceType">
       <endpoint
          address="myAddress" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration1"
          contract="MyContract"  />
       <endpoint
          address="myAddress2" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration2"
          contract="MyContract" />
       <endpoint
          address="myAddress3" binding="basicHttpBinding"
          contract="MyContract" />
       </service>
      </services>
    </system.serviceModel>
</configuration>

Värdet name för bindingConfiguration anges i -elementet <binding> . name Måste vara en unik sträng inom bindningstypens omfång, i det här fallet <basicHttpBinding eller ett tomt värde för att referera till standardbindningen>. Slutpunkten länkar till konfigurationen genom att ange bindingConfiguration attributet till den här strängen.

A behaviorConfiguration implementeras på samma sätt, vilket visas i följande exempel.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myBehavior">
           <callbackDebug includeExceptionDetailInFaults="true" />
         </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>

    </behaviors>
    <services>
     <service name="NewServiceType">
       <endpoint
          address="myAddress3" behaviorConfiguration="myBehavior"
          binding="basicHttpBinding"
          contract="MyContract" />
      </service>
    </services>
   </system.serviceModel>
</configuration>

Observera att standarduppsättningen med tjänstbeteenden läggs till i tjänsten. Det här systemet gör att slutpunkter kan dela vanliga konfigurationer utan att omdefiniera inställningarna. Om du behöver ett datoromfattande omfång skapar du bindnings- eller beteendekonfigurationen i Machine.config. Konfigurationsinställningarna är tillgängliga i alla App.config-filer. Konfigurationsredigerarens verktyg (SvcConfigEditor.exe) gör det enkelt att skapa konfigurationer.

Beteendesammanslagning

Funktionen för beteendesammanslagning gör det enklare att hantera beteenden när du vill att en uppsättning vanliga beteenden ska användas konsekvent. Med den här funktionen kan du ange beteenden på olika nivåer i konfigurationshierarkin och låta tjänster ärva beteenden från flera nivåer i konfigurationshierarkin. För att illustrera hur detta fungerar förutsätter vi att du har följande virtuella kataloglayout i IIS:

~\Web.config~\Service.svc~\Child\Web.config~\Child\Service.svc

Och filen ~\Web.config har följande innehåll:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Och du har en underordnad Web.config på ~\Child\Web.config med följande innehåll:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Tjänsten som finns på ~\Child\Service.svc fungerar som om den har både serviceDebug- och serviceMetadata-beteenden. Tjänsten som finns på ~\Service.svc har bara serviceDebug-beteendet. Vad som händer är att de två beteendesamlingarna med samma namn (i det här fallet den tomma strängen) sammanfogas.

Du kan också rensa beteendesamlingar med hjälp av den <tydliga taggen och ta bort enskilda beteenden från samlingen med hjälp av ta bort-taggen<>.> Följande två konfigurationer resulterar till exempel i att den underordnade tjänsten endast har serviceMetadata-beteendet:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <remove name="serviceDebug"/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <clear/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Beteendesammanslagning görs för namnlösa beteendesamlingar som visas ovan och namngivna beteendesamlingar också.

Beteendesammanslagning fungerar i IIS-värdmiljön, där Web.config-filer sammanfogas hierarkiskt med rotfilen Web.config och machine.config. Men det fungerar också i programmiljön, där machine.config kan sammanfogas med App.config-filen.

Beteendesammanslagning gäller både slutpunktsbeteenden och tjänstbeteenden i konfigurationen.

Om en underordnad beteendesamling innehåller ett beteende som redan finns i den överordnade beteendesamlingen åsidosätter det underordnade beteendet den överordnade. Så om en samling överordnat beteende hade <serviceMetadata httpGetEnabled="False" /> och en underordnad beteendesamling hade <serviceMetadata httpGetEnabled="True" />, skulle det underordnade beteendet åsidosätta det överordnade beteendet i beteendesamlingen och httpGetEnabled skulle vara "sant".

Se även