Egyszerűsített konfiguráció

A Windows Communication Foundation (WCF) szolgáltatásainak konfigurálása összetett feladat lehet. Számos különböző lehetőség létezik, és nem mindig könnyű meghatározni, hogy milyen beállításokra van szükség. Bár a konfigurációs fájlok növelik a WCF-szolgáltatások rugalmasságát, sok nehezen kereshető probléma forrása is. .NET-keretrendszer 4.6.1 kezeli ezeket a problémákat, és módot kínál a szolgáltatáskonfiguráció méretének és összetettségének csökkentésére.

Egyszerűsített konfiguráció

A WCF szolgáltatáskonfigurációs fájljaiban a <system.serviceModel> szakasz minden üzemeltetett szolgáltatáshoz tartalmaz egy <service> elemet. Az <service> elem olyan elemek gyűjteményét <endpoint> tartalmazza, amelyek meghatározzák az egyes szolgáltatásokhoz közzétett végpontokat, és opcionálisan a szolgáltatás viselkedését. Az <endpoint> elemek meghatározzák a végpont által közzétett címet, kötést és szerződést, valamint opcionálisan a kötés konfigurációját és a végpont viselkedését. A <system.serviceModel> szakasz tartalmaz egy <behaviors> elemet is, amely lehetővé teszi a szolgáltatás vagy a végpont viselkedésének megadását. Az alábbi példa egy <system.serviceModel> konfigurációs fájl szakaszát mutatja be.

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

.NET-keretrendszer 4.6.1 megkönnyíti a WCF-szolgáltatások konfigurálását azáltal, hogy eltávolítja az elemre vonatkozó követelményt<service>. Ha nem ad hozzá szakaszt <service> vagy nem ad hozzá végpontokat egy <service> szakaszban, és a szolgáltatás programozott módon nem határoz meg végpontokat, akkor a rendszer automatikusan hozzáad egy alapértelmezett végpontot a szolgáltatáshoz, egyet az egyes szolgáltatási alapcímekhez és a szolgáltatás által implementált szerződésekhez. Ezen végpontok mindegyikében a végpont címe az alapcímnek felel meg, a kötést az alapcímséma határozza meg, a szerződés pedig a szolgáltatás által implementált. Ha nem kell semmilyen végpontot vagy szolgáltatás viselkedést megadnia, vagy nem kell módosítania a kötési beállításokat, akkor egyáltalán nem kell megadnia egy szolgáltatáskonfigurációs fájlt. Ha egy szolgáltatás két szerződést valósít meg, és a gazdagép http- és TCP-átvitelt is engedélyez, a szolgáltatás gazdagépe négy alapértelmezett végpontot hoz létre, egyet minden egyes átvitelt használó szerződéshez. Az alapértelmezett végpontok létrehozásához a szolgáltatás gazdagépének tudnia kell, hogy milyen kötéseket kell használnia. Ezek a beállítások egy <protocolMappings> alszakaszban vannak megadva a <system.serviceModel> szakaszban. A <protocolMappings> szakasz a kötéstípusokra leképezett átviteli protokoll-sémák listáját tartalmazza. A szolgáltatás hosztja a neki átadott alapcímeket használja annak meghatározására, hogy melyik kapcsolatot kell alkalmaznia. Az alábbi példa az <protocolMappings> elemet használja.

Figyelmeztetés

Az alapértelmezett konfigurációelemek( például kötések vagy viselkedések) módosítása hatással lehet a konfigurációs hierarchia alacsonyabb szintjein definiált szolgáltatásokra, mivel ezek az alapértelmezett kötéseket és viselkedéseket használják. Ezért aki módosítja az alapértelmezett kötéseket és viselkedéseket, tisztában kell lennie azzal, hogy ezek a módosítások hatással lehetnek a hierarchia más szolgáltatásaira is.

Megjegyzés

Az Internet Information Services (IIS) vagy a Windows Folyamataktiválási szolgáltatás (WAS) keretében üzemeltetett szolgáltatások alapcímként a virtuális könyvtárat használják.

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

Az előző példában a "http" sémával kezdődő alapcímmel rendelkező végpont a BasicHttpBinding. A "net.tcp" sémával kezdődő alapcímmel rendelkező végpont a(z) NetTcpBinding-t használja. Felülbírálhatja a beállításokat egy helyi App.config vagy Web.config fájlban.

A <protocolMappings> szakasz minden elemének meg kell adnia egy séma és egy kötés. Esetleg megadhat egy olyan bindingConfiguration attribútumot, amely a <bindings> konfigurációs fájl szakaszában egy kötéskonfigurációt határoz meg. Ha nincs bindingConfiguration megadva, a rendszer a megfelelő kötéstípus névtelen kötéskonfigurációját használja.

A szolgáltatás viselkedése az alapértelmezett végpontokhoz van konfigurálva <serviceBehaviors> szakaszokon belüli névtelen <behavior> szakaszok használatával. A szolgáltatás viselkedésének konfigurálása során minden névtelen <behavior> elem a <serviceBehaviors> elemen belül kerül felhasználásra. Az alábbi konfigurációs fájl például lehetővé teszi a szolgáltatás metaadatainak közzétételét a gazdagépen belüli összes szolgáltatás esetében.

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

A végpont viselkedése névtelen <behavior> szakaszok segítségével <serviceBehaviors> szakaszokon belül van konfigurálva.

Az alábbi példa egy olyan konfigurációs fájl, amely egyenértékű a jelen témakör elején található konfigurációs fájllal, amely az egyszerűsített konfigurációs modellt használja.

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

Fontos

Ez a funkció csak a WCF szolgáltatáskonfigurációhoz kapcsolódik, nem az ügyfélkonfigurációhoz. A WCF-ügyfélkonfigurációt legtöbbször egy olyan eszköz hozza létre, mint például a svcutil.exe vagy a Visual Studióból származó szolgáltatáshivatkozás hozzáadása. Ha manuálisan konfigurál egy WCF-ügyfelet, hozzá kell adnia egy <ügyfélelemet> a konfigurációhoz, és meg kell adnia a meghívni kívánt végpontokat.

Lásd még