Sdílet prostřednictvím


Zjednodušená konfigurace

Konfigurace služeb WCF (Windows Communication Foundation) může být složitá úloha. Existuje mnoho různých možností a není vždy snadné určit, jaká nastavení se vyžadují. I když konfigurační soubory zvyšují flexibilitu služeb WCF, jsou také zdrojem pro mnoho obtížného nalezení problémů. Rozhraní .NET Framework 4.6.1 tyto problémy řeší a poskytuje způsob, jak zmenšit velikost a složitost konfigurace služby.

Zjednodušená konfigurace

V konfiguračních souborech <system.serviceModel> služby WCF obsahuje <service> oddíl element pro každou hostované službu. Element <service> obsahuje kolekci <endpoint> prvků, které určují koncové body vystavené pro každou službu a volitelně sadu chování služby. Prvky <endpoint> určují adresu, vazbu a kontrakt vystavený koncovým bodem a volitelně vazbu konfigurace a chování koncových bodů. Oddíl <system.serviceModel> obsahuje <behaviors> také prvek, který umožňuje zadat chování služby nebo koncového bodu. Následující příklad ukazuje <system.serviceModel> část konfiguračního souboru.

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
   <basicHttpBinding>
      <binding name=MyBindingConfig"
               maxBufferSize="100"
               maxReceiveBufferSize="100" />
   </basicHttpBinding>
   </bindings>   <services>
    <service behaviorConfiguration="MyServiceBehavior"
             name="MyService">
      <endpoint address=""
                binding="basicHttpBinding"
                contract="ICalculator"
                bindingConfiguration="MyBindingConfig" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

Rozhraní .NET Framework 4.6.1 usnadňuje konfiguraci služby WCF odebráním požadavku na <service> prvek. Pokud do oddílu <service> nepřidáte oddíl ani nepřidáte žádné koncové body <service> a vaše služba nedefinuje žádné koncové body programově, pak se do služby automaticky přidá sada výchozích koncových bodů, jedna pro každou základní adresu služby a pro každou smlouvu implementovanou vaší službou. V každém z těchto koncových bodů adresa koncového bodu odpovídá základní adrese, vazba je určena základním schématem adres a kontrakt je ten, který implementuje vaše služba. Pokud nemusíte zadávat žádné koncové body ani chování služby nebo provádět změny nastavení vazby, nemusíte vůbec zadávat konfigurační soubor služby. Pokud služba implementuje dva kontrakty a hostitel povolí přenosy HTTP i TCP, vytvoří hostitel služby čtyři výchozí koncové body, jeden pro každý kontrakt pomocí každého přenosu. Pokud chcete vytvořit výchozí koncové body, musí hostitel služby vědět, jaké vazby se mají použít. Tato nastavení jsou uvedená v <protocolMappings> oddílu v oddílu <system.serviceModel> . Oddíl <protocolMappings> obsahuje seznam schémat přenosového protokolu mapovaného na typy vazeb. Hostitel služby používá základní adresy předané k určení, kterou vazbu použít. Následující příklad používá <protocolMappings> element.

Upozorňující

Změna výchozích konfiguračních prvků, jako jsou vazby nebo chování, může ovlivnit služby definované v nižších úrovních hierarchie konfigurace, protože můžou používat tyto výchozí vazby a chování. Každý, kdo tedy změní výchozí vazby a chování, musí mít na paměti, že tyto změny můžou mít vliv na jiné služby v hierarchii.

Poznámka:

Služby hostované v rámci služby Internetová informační služba (IIS) nebo Windows Process Activation Service (WAS) používají virtuální adresář jako jejich základní adresu.

<protocolMapping>
  <add scheme="http"     binding="basicHttpBinding" bindingConfiguration="MyBindingConfig"/>
  <add scheme="net.tcp"  binding="netTcpBinding"/>
  <add scheme="net.pipe" binding="netNamedPipeBinding"/>
  <add scheme="net.msmq" binding="netMSMQBinding"/>
</protocolMapping>

V předchozím příkladu používá koncový bod se základní adresou začínající schématem BasicHttpBindinghttp . Koncový bod se základní adresou, která začíná schématem net.tcp, používá NetTcpBinding. Nastavení můžete přepsat v místním souboru App.config nebo Web.config.

Každý prvek v oddílu <protocolMappings> musí určovat schéma a vazbu. Volitelně může zadat bindingConfiguration atribut, který určuje konfiguraci vazby v <bindings> části konfiguračního souboru. Pokud není zadána žádná bindingConfiguration , použije se konfigurace anonymní vazby příslušného typu vazby.

Chování služby se konfiguruje pro výchozí koncové body pomocí anonymních <behavior> oddílů v <serviceBehaviors> oddílech. Všechny nepojmenované elementy se <>serviceBehaviorspoužívají ke konfiguraci chování služby.<behavior> Například následující konfigurační soubor umožňuje publikování metadat služby pro všechny služby v rámci hostitele.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <!-- No <service> tag is necessary. Default endpoints are added to the service -->
    <!-- The service behavior with name="" is picked up by the service -->
 </system.serviceModel>

Chování koncových bodů se konfiguruje pomocí anonymních <behavior> oddílů v <serviceBehaviors> oddílech.

Následující příklad je konfigurační soubor ekvivalentní konfiguračnímu souboru na začátku tohoto tématu, který používá zjednodušený konfigurační model.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
       <basicHttpBinding>
          <binding maxBufferSize="100"
                   maxReceiveBufferSize="100" />
       </basicHttpBinding>
    </bindings>
    <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
    <!-- The service behavior with name="" will be picked up by the service -->
    <protocolMapping>
      <add scheme="http" binding="basicHttpBinding" />
  </protocolMapping>
  </system.serviceModel>

Důležité

Tato funkce se týká pouze konfigurace služby WCF, nikoli konfigurace klienta. Ve většině případů se konfigurace klienta WCF vygeneruje nástrojem, jako je svcutil.exe nebo přidání odkazu na službu ze sady Visual Studio. Pokud ručně konfigurujete klienta WCF, budete muset do konfigurace přidat <prvek klienta> a zadat všechny koncové body, které chcete volat.

Viz také