Sdílet prostřednictvím


Konfigurace vazeb pro služby Windows Communication Foundation

Při vytváření aplikace často chcete odložit rozhodnutí správci po nasazení aplikace. Například často neexistuje způsob, jak předem zjistit, jaká adresa služby nebo identifikátor URI (Uniform Resource Identifier) bude. Místo pevně zakódované adresy je vhodnější povolit správci, aby to udělal po vytvoření služby. Tato flexibilita se provádí prostřednictvím konfigurace.

Poznámka:

Pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) s /config přepínačem můžete rychle vytvářet konfigurační soubory.

Hlavní oddíly

Schéma konfigurace wcf (Windows Communication Foundation) obsahuje následující tři hlavní části (serviceModel, bindingsa services):

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

Elementy modelu služby

Oddíl ohraničený elementem system.ServiceModel můžete použít ke konfiguraci typu služby s jedním nebo více koncovými body a také nastavení pro službu. Každý koncový bod je pak možné nakonfigurovat s adresou, kontraktem a vazbou. Další informace o koncových bodech najdete v tématu Přehled vytváření koncových bodů. Pokud nejsou zadány žádné koncové body, modul runtime přidá výchozí koncové body. 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.

Vazba určuje přenosy (HTTP, TCP, kanály, řízení front zpráv) a protokoly (zabezpečení, spolehlivost, toky transakcí) a skládá se z prvků vazby, z nichž každý určuje aspekt komunikace koncového bodu se světem.

Například zadání elementu <basicHttpBinding> označuje použití protokolu HTTP jako přenosu koncového bodu. Používá se k připojení koncového bodu za běhu při otevření služby pomocí tohoto koncového bodu.

Existují dva druhy vazeb: předdefinované a vlastní. Předdefinované vazby obsahují užitečné kombinace prvků, které se používají v běžných scénářích. Seznam předdefinovaných typů vazeb, které WCF poskytuje, naleznete v tématu Systémové vazby. Pokud žádná předdefinovaná kolekce vazeb nemá správnou kombinaci funkcí, které aplikace služby potřebuje, můžete vytvořit vlastní vazby tak, aby splňovaly požadavky aplikace. Další informace o vlastních vazbách najdete v tématu <customBinding>.

Následující čtyři příklady ilustrují nejběžnější konfigurace vazeb používané k nastavení služby WCF.

Zadání koncového bodu pro použití typu vazby

První příklad ukazuje, jak zadat koncový bod nakonfigurovaný s adresou, kontraktem a vazbou.

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

V tomto příkladu name atribut označuje, pro který typ služby je konfigurace určena. Když ve svém kódu vytvoříte službu s kontraktem HelloWorld , inicializuje se se všemi koncovými body definovanými v ukázkové konfiguraci. Pokud sestavení implementuje pouze jeden kontrakt služby, může být atribut vynechán, name protože služba používá jediný dostupný typ. Atribut přebírá řetězec, který musí být ve formátu. Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Atribut address určuje identifikátor URI, který ostatní koncové body používají ke komunikaci se službou. Identifikátor URI může být absolutní nebo relativní cesta. Pokud je k dispozici relativní adresa, očekává se, že hostitel poskytne základní adresu, která je vhodná pro schéma přenosu použitého v vazbě. Pokud adresa není nakonfigurovaná, předpokládá se, že základní adresa je adresa daného koncového bodu.

Atribut contract určuje kontrakt, který tento koncový bod vystavuje. Typ implementace služby musí implementovat typ kontraktu. Pokud implementace služby implementuje jeden typ kontraktu, může být tato vlastnost vynechána.

Atribut binding vybere předdefinovanou nebo vlastní vazbu, která se má použít pro tento konkrétní koncový bod. Koncový bod, který explicitně nevybere vazbu, používá výchozí výběr vazby, což je BasicHttpBinding.

Úprava předdefinované vazby

V následujícím příkladu je předdefinovaná vazba změněna. Pak se dá použít ke konfiguraci libovolného koncového bodu ve službě. Vazba se upraví nastavením hodnoty na 1 sekundu ReceiveTimeout . Všimněte si, že vlastnost vrací TimeSpan objekt.

Tato změněná vazba se nachází v části vazby. Tuto změněnou vazbu lze nyní použít při vytváření libovolného koncového bodu nastavením binding atributu v elementu endpoint .

Poznámka:

Pokud vazbu bindingConfiguration pojmenujete, musí se zadaný v koncovém bodu služby shodovat.

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

Konfigurace chování pro použití u služby

V následujícím příkladu je pro typ služby nakonfigurované konkrétní chování. Tento ServiceMetadataBehavior element slouží k povolení nástroje ServiceModel Metadata Utility Tool (Svcutil.exe) dotazování služby a generování dokumentů WSDL (Web Services Description Language) z metadat.

Poznámka:

Pokud dáte konkrétnímu názvu chování, behaviorConfiguration musí se shodovat zadaný v části služby nebo koncového bodu.

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

Předchozí konfigurace umožňuje klientovi volat a získat metadata služby typu HelloWorld.

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

Určení služby se dvěma koncovými body pomocí různých hodnot vazeb

V tomto posledním příkladu jsou pro HelloWorld typ služby nakonfigurované dva koncové body. Každý koncový bod používá jiný přizpůsobený bindingConfiguration atribut stejného typu vazby (každý upraví 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>  

Stejné chování můžete získat pomocí výchozí konfigurace tak, že přidáte protocolMapping oddíl a nakonfigurujete vazby, jak je znázorněno v následujícím příkladu.

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

Viz také