Delen via


Vereenvoudigde configuratie

Het configureren van WCF-services (Windows Communication Foundation) kan een complexe taak zijn. Er zijn veel verschillende opties en het is niet altijd gemakkelijk om te bepalen welke instellingen vereist zijn. Hoewel configuratiebestanden de flexibiliteit van WCF-services vergroten, zijn ze ook de bron voor veel moeilijk te vinden problemen. .NET Framework 4.6.1 lost deze problemen op en biedt een manier om de grootte en complexiteit van de serviceconfiguratie te verminderen.

Vereenvoudigde configuratie

In wcF-serviceconfiguratiebestanden bevat de <system.serviceModel> sectie een <service> element voor elke service die wordt gehost. Het <service> element bevat een verzameling <endpoint> elementen die de eindpunten opgeven die beschikbaar zijn voor elke service en eventueel een set servicegedrag. De <endpoint> elementen geven het adres, de binding en het contract op die beschikbaar worden gesteld door het eindpunt, en eventueel configuratie- en eindpuntgedrag. De <system.serviceModel> sectie bevat ook een <behaviors> element waarmee u service- of eindpuntgedrag kunt opgeven. In het volgende voorbeeld ziet u de <system.serviceModel> sectie van een configuratiebestand.

<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 Framework 4.6.1 maakt het configureren van een WCF-service eenvoudiger door de vereiste voor het <service> element te verwijderen. Als u geen sectie toevoegt <service> of eindpunten toevoegt in een <service> sectie en uw service geen eindpunten programmatisch definieert, worden er automatisch een set standaardeindpunten toegevoegd aan uw service, één voor elk servicebasisadres en voor elk contract dat door uw service wordt geïmplementeerd. In elk van deze eindpunten komt het eindpuntadres overeen met het basisadres, wordt de binding bepaald door het basisadresschema en is het contract het adres dat door uw service wordt geïmplementeerd. Als u geen eindpunten of servicegedrag hoeft op te geven of bindingsinstellingswijzigingen wilt aanbrengen, hoeft u helemaal geen serviceconfiguratiebestand op te geven. Als een service twee contracten implementeert en de host zowel HTTP als TCP inschakelt, maakt de servicehost vier standaardeindpunten, één voor elk contract met elk transport. Als u standaardeindpunten wilt maken, moet de servicehost weten welke bindingen moeten worden gebruikt. Deze instellingen worden opgegeven in een <protocolMappings> sectie in de <system.serviceModel> sectie. De <protocolMappings> sectie bevat een lijst met transportprotocolschema's die zijn toegewezen aan bindingstypen. De servicehost gebruikt de basisadressen die eraan worden doorgegeven om te bepalen welke binding moet worden gebruikt. In het volgende voorbeeld wordt het <protocolMappings> element gebruikt.

Waarschuwing

Het wijzigen van standaardconfiguratie-elementen, zoals bindingen of gedrag, kan van invloed zijn op services die zijn gedefinieerd in lagere niveaus van de configuratiehiërarchie, omdat ze mogelijk deze standaardbindingen en -gedrag gebruiken. Dus wie standaardbindingen en gedrag wijzigt, moet er rekening mee houden dat deze wijzigingen van invloed kunnen zijn op andere services in de hiërarchie.

Notitie

Services die worden gehost onder Internet Information Services (IIS) of Windows Process Activation Service (WAS) gebruiken de virtuele map als basisadres.

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

In het vorige voorbeeld gebruikt een eindpunt met een basisadres dat begint met het http-schema.BasicHttpBinding Een eindpunt met een basisadres dat begint met het schema 'net.tcp' gebruikt het NetTcpBinding. U kunt instellingen overschrijven in een lokaal App.config- of Web.config-bestand.

Elk element in de <protocolMappings> sectie moet een schema en een binding opgeven. U kunt eventueel een bindingConfiguration kenmerk opgeven dat een bindingsconfiguratie aangeeft in de <bindings> sectie van het configuratiebestand. Als er geen bindingConfiguration is opgegeven, wordt de anonieme bindingsconfiguratie van het juiste bindingstype gebruikt.

Servicegedrag wordt geconfigureerd voor de standaardeindpunten met behulp van anonieme <behavior> secties in <serviceBehaviors> secties. Eventuele niet-benoemde <behavior> elementen <serviceBehaviors> worden gebruikt om servicegedrag te configureren. Met het volgende configuratiebestand kunt u bijvoorbeeld servicemetagegevens publiceren voor alle services binnen de host.

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

Eindpuntgedrag wordt geconfigureerd met behulp van anonieme <behavior> secties in <serviceBehaviors> secties.

Het volgende voorbeeld is een configuratiebestand dat gelijk is aan het configuratiebestand aan het begin van dit onderwerp dat gebruikmaakt van het vereenvoudigde configuratiemodel.

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

Belangrijk

Deze functie heeft alleen betrekking op de configuratie van de WCF-service, niet op de clientconfiguratie. De meeste keren wordt de WCF-clientconfiguratie gegenereerd door een hulpprogramma zoals svcutil.exe of het toevoegen van een servicereferentie vanuit Visual Studio. Als u handmatig een WCF-client configureert, moet u een <clientelement> toevoegen aan de configuratie en eventuele eindpunten opgeven die u wilt aanroepen.

Zie ook