Sdílet prostřednictvím


Konfigurace služeb pomocí konfiguračních souborů

Konfigurace služby Windows Communication Foundation (WCF) s konfiguračním souborem poskytuje flexibilitu poskytování dat chování koncových bodů a služeb v okamžiku nasazení místo v době návrhu. Toto téma popisuje primární dostupné techniky.

Služba WCF je konfigurovatelná pomocí konfigurační technologie rozhraní .NET Framework. Nejčastěji se elementy XML přidávají do souboru Web.config pro web Internetová informační služba (IIS), který je hostitelem služby WCF. Prvky umožňují změnit podrobnosti, jako jsou adresy koncových bodů (skutečné adresy používané ke komunikaci se službou) na základě počítače. Kromě toho WCF obsahuje několik prvků poskytovaných systémem, které umožňují rychle vybrat nejzásadnější funkce pro službu. Počínaje rozhraním .NET Framework 4 přináší WCF nový výchozí konfigurační model, který zjednodušuje požadavky na konfiguraci WCF. Pokud pro konkrétní službu nezadáte žádnou konfiguraci WCF, modul runtime automaticky nakonfiguruje vaši službu s některými standardními koncovými body a výchozím nastavením vazby nebo chování. V praxi je zápis konfigurace hlavní součástí programování aplikací WCF.

Další informace naleznete v tématu Konfigurace vazeb pro služby. Seznam nejčastěji používaných prvků najdete v tématu Systémové vazby. Další informace o výchozích koncových bodech, vazbách a chování najdete v tématu Zjednodušená konfigurace a zjednodušená konfigurace pro služby WCF.

Důležité

Při nasazování souběžných scénářů, kdy jsou nasazeny dvě různé verze služby, je nutné zadat částečné názvy sestavení odkazovaných v konfiguračních souborech. Důvodem je to, že konfigurační soubor se sdílí ve všech verzích služby a můžou běžet v různých verzích rozhraní .NET Framework.

System.Configuration: Web.config a App.config

WCF používá konfigurační systém System.Configuration rozhraní .NET Framework.

Při konfiguraci služby v sadě Visual Studio zadejte nastavení pomocí souboru Web.config nebo souboru App.config. Volba názvu konfiguračního souboru je určena hostitelským prostředím, které zvolíte pro službu. Pokud k hostování služby používáte službu IIS, použijte soubor Web.config. Pokud používáte jakékoli jiné hostitelské prostředí, použijte soubor App.config.

V sadě Visual Studio se soubor s názvem App.config používá k vytvoření konečného konfiguračního souboru. Konečný název použitý pro konfiguraci závisí na názvu sestavení. Například sestavení s názvem "Cohowinery.exe" má konečný název konfiguračního souboru "Cohowinery.exe.config". Soubor App.config ale stačí upravit. Změny provedené v tomto souboru se automaticky provedou v konečném konfiguračním souboru aplikace v době kompilace.

Při použití souboru App.config soubor konfiguračního systému sloučí soubor App.config s obsahem souboru Machine.config při spuštění aplikace a použije se konfigurace. Tento mechanismus umožňuje definovat nastavení na úrovni počítače v souboru Machine.config. Soubor App.config lze použít k přepsání nastavení souboru Machine.config; Můžete také uzamknout nastavení v souboru Machine.config, aby se používaly. V případě Web.config konfigurační systém slučuje soubory Web.config ve všech adresářích, které vedou k adresáři aplikace, do konfigurace, která se použije. Další informace o konfiguraci a prioritách nastavení najdete v tématech v System.Configuration oboru názvů.

Hlavní části konfiguračního souboru

Hlavní části konfiguračního souboru obsahují následující prvky.

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

Poznámka:

Vazby a oddíly chování jsou volitelné a jsou zahrnuty pouze v případě potřeby.

Element <services>

Tento services prvek obsahuje specifikace pro všechny služby, které jsou hostiteli aplikací. Počínaje zjednodušeným konfiguračním modelem v rozhraní .NET Framework 4 je tato část volitelná.

<services>

Element <služby>

Každá služba má tyto atributy:

  • name. Určuje typ, který poskytuje implementaci kontraktu služby. Jedná se o plně kvalifikovaný název, který se skládá z oboru názvů, tečky a potom názvu typu. Příklad: "MyNameSpace.myServiceType".

  • behaviorConfiguration. Určuje název jednoho z behavior prvků nalezených v elementu behaviors . Zadané chování řídí akce, jako je například to, jestli služba umožňuje zosobnění. Pokud je jeho hodnota prázdný název nebo není k dispozici, behaviorConfiguration přidá se do služby výchozí sada chování služby.

  • <služba>

Element <koncového bodu>

Každý koncový bod vyžaduje adresu, vazbu a kontrakt, které jsou reprezentovány následujícími atributy:

  • address. Určuje identifikátor URI (Uniform Resource Identifier) služby, což může být absolutní adresa nebo adresa, která je uvedena vzhledem k základní adrese služby. Pokud je nastavený na prázdný řetězec, znamená to, že koncový bod je k dispozici na základní adrese, která je zadaná při vytváření ServiceHost služby.

  • binding. Obvykle určuje systémovou vazbu, například WSHttpBinding, ale může také určit uživatelem definovanou vazbu. Zadaná vazba určuje typ přenosu, zabezpečení a kódování a zda jsou podporovány nebo povoleny spolehlivé relace, transakce nebo streamování.

  • bindingConfiguration. Pokud je nutné upravit výchozí hodnoty vazby, lze to provést konfigurací příslušného binding prvku v elementu bindings . Tento atribut by měl mít stejnou hodnotu jako name atribut binding prvku, který se používá ke změně výchozích hodnot. Pokud není zadán žádný název nebo není bindingConfiguration zadán v vazbě, použije se výchozí vazba typu vazby v koncovém bodu.

  • contract. Určuje rozhraní, které definuje kontrakt. Toto je rozhraní implementované v modulu CLR (Common Language Runtime) typu určeném name atributem elementu service .

  • <zakončení>

Element <bindings>

Prvek bindings obsahuje specifikace pro všechny vazby, které mohou být použity libovolným koncovým bodem definovaným v jakékoli službě.

<na něčí žádosti>

Element <vazby>

Prvky binding obsažené v elementu bindings mohou být buď jednou ze systémových vazeb (viz Systémové vazby) nebo vlastní vazby (viz vlastní vazby). Element bindingname atribut, který koreluje vazbu s koncovým bodem zadaným v bindingConfiguration atributu endpoint prvku. Pokud není zadán žádný název, odpovídá tato vazba výchozímu typu vazby.

Další informace o konfiguraci služeb a klientů naleznete v tématu Konfigurace služeb WCF.

<závazný>

Element <behaviors>

Jedná se o element kontejneru behavior pro elementy, které definují chování služby.

<Chování>

Element <chování>

Každý behavior prvek je identifikován atributem name a poskytuje buď chování poskytované systémem, například <throttling>, nebo vlastní chování. Pokud není zadaný žádný název, odpovídá tento prvek chování výchozí službě nebo koncovému bodu.

<chování>

Jak používat konfigurace vazeb a chování

WCF usnadňuje sdílení konfigurací mezi koncovými body pomocí referenčního systému v konfiguraci. Místo přímého přiřazování hodnot konfigurace ke koncovému bodu jsou hodnoty konfigurace související s vazbou seskupené v bindingConfiguration prvcích v oddílu <binding> . Konfigurace vazby je pojmenovaná skupina nastavení pro vazbu. Koncové body pak můžou odkazovat bindingConfiguration na název.

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

Vlastnost name je nastavena v elementu<binding>.bindingConfiguration Musí name to být jedinečný řetězec v rámci oboru typu vazby – v tomto případě <basicHttpBinding> nebo prázdná hodnota odkazující na výchozí vazbu. Koncový bod odkazuje na konfiguraci nastavením atributu bindingConfiguration na tento řetězec.

A behaviorConfiguration se implementuje stejným způsobem, jak je znázorněno v následující ukázce.

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

Všimněte si, že do služby se přidá výchozí sada chování služby. Tento systém umožňuje koncovým bodům sdílet společné konfigurace bez opětovného definice nastavení. Pokud se vyžaduje obor pro celý počítač, vytvořte v nástroji Machine.config konfiguraci vazby nebo chování. Nastavení konfigurace jsou k dispozici ve všech souborech App.config. Nástroj editoru konfigurace (SvcConfigEditor.exe) usnadňuje vytváření konfigurací.

Sloučení chování

Funkce sloučení chování usnadňuje správu chování v případech, kdy chcete konzistentně používat sadu běžných chování. Tato funkce umožňuje určit chování na různých úrovních hierarchie konfigurace a mít služby dědění chování z více úrovní hierarchie konfigurace. Abyste si ukázali, jak to funguje, předpokládá se, že máte ve službě IIS následující rozložení virtuálního adresáře:

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

~\Web.config Soubor má následující obsah:

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

A máte podřízenou web.config umístěnou v umístění ~\Child\Web.config s následujícím obsahem:

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

Služba umístěná v umístění ~\Child\Service.svc se bude chovat, jako by měla chování serviceDebug i serviceMetadata. Služba umístěná v umístění ~\Service.svc bude mít pouze chování serviceDebug. Co se stane, je, že dvě kolekce chování se stejným názvem (v tomto případě prázdný řetězec) jsou sloučeny.

Kolekce chování můžete také vymazat pomocí <jasné> značky a odebráním jednotlivých chování z kolekce pomocí <značky remove> . Například následující dvě konfigurace způsobí, že podřízená služba má pouze chování serviceMetadata:

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

Sloučení chování se provádí u kolekcí chování bez názvů, jak je znázorněno výše a pojmenovaných kolekcí chování.

Slučování chování funguje v hostitelském prostředí služby IIS, ve kterém se soubory Web.config sloučí hierarchicky s kořenovým souborem Web.config a machine.config. Funguje ale také v aplikačním prostředí, kde machine.config může sloučit se souborem App.config.

Sloučení chování se vztahuje na chování koncových bodů i chování služby v konfiguraci.

Pokud kolekce podřízeného chování obsahuje chování, které je již v nadřazené kolekci chování, podřízené chování přepíše nadřazený objekt. Takže pokud by kolekce nadřazeného chování měla <serviceMetadata httpGetEnabled="False" /> a kolekce podřízeného chování měla <serviceMetadata httpGetEnabled="True" />, podřízené chování by přepsala nadřazené chování v kolekci chování a httpGetEnabled by byla "true".

Viz také