Dela via


Förenklad konfiguration

Att konfigurera WCF-tjänster (Windows Communication Foundation) kan vara en komplex uppgift. Det finns många olika alternativ och det är inte alltid lätt att avgöra vilka inställningar som krävs. Även om konfigurationsfiler ökar flexibiliteten för WCF-tjänster, är de också källan för många svåra att hitta problem. .NET Framework 4.6.1 åtgärdar dessa problem och ger ett sätt att minska storleken och komplexiteten i tjänstkonfigurationen.

Förenklad konfiguration

I WCF-tjänstkonfigurationsfiler <system.serviceModel> innehåller avsnittet ett <service> element för varje värdbaserad tjänst. Elementet <service> innehåller en samling <endpoint> element som anger slutpunkterna som exponeras för varje tjänst och eventuellt en uppsättning tjänstbeteenden. Elementen <endpoint> anger adressen, bindningen och kontraktet som exponeras av slutpunkten, och du kan även binda konfigurations- och slutpunktsbeteenden. Avsnittet <system.serviceModel> innehåller också ett <behaviors> element som gör att du kan ange tjänst- eller slutpunktsbeteenden. I följande exempel visas avsnittet i <system.serviceModel> en konfigurationsfil.

<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 gör det enklare att konfigurera en WCF-tjänst genom att ta bort kravet på elementet <service> . Om du inte lägger till ett <service> avsnitt eller lägger till några slutpunkter i ett <service> avsnitt och tjänsten inte programmatiskt definierar några slutpunkter, läggs en uppsättning standardslutpunkter automatiskt till i tjänsten, en för varje tjänstbasadress och för varje kontrakt som implementeras av tjänsten. I var och en av dessa slutpunkter motsvarar slutpunktsadressen basadressen, bindningen bestäms av basadressschemat och kontraktet är den som implementeras av din tjänst. Om du inte behöver ange några slutpunkter eller tjänstbeteenden eller göra några ändringar i bindningsinställningen behöver du inte ange någon tjänstkonfigurationsfil alls. Om en tjänst implementerar två kontrakt och värden aktiverar både HTTP- och TCP-transporter skapar tjänstvärden fyra standardslutpunkter, en för varje kontrakt som använder varje transport. Om du vill skapa standardslutpunkter måste tjänstvärden veta vilka bindningar som ska användas. De här inställningarna anges i ett <protocolMappings> avsnitt i avsnittet <system.serviceModel> . Avsnittet <protocolMappings> innehåller en lista över transportprotokollscheman som mappats till bindningstyper. Tjänstvärden använder de basadresser som skickas till den för att avgöra vilken bindning som ska användas. I följande exempel används elementet <protocolMappings> .

Varning

Om du ändrar standardkonfigurationselement, till exempel bindningar eller beteenden, kan det påverka tjänster som definierats på lägre nivåer i konfigurationshierarkin, eftersom de kanske använder dessa standardbindningar och beteenden. Den som ändrar standardbindningar och beteenden måste därför vara medveten om att dessa ändringar kan påverka andra tjänster i hierarkin.

Kommentar

Tjänster som finns under Internet Information Services (IIS) eller Windows Process Activation Service (WAS) använder den virtuella katalogen som basadress.

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

I föregående exempel använder BasicHttpBindingen slutpunkt med en basadress som börjar med "http"-schemat . En slutpunkt med en basadress som börjar med "net.tcp"-schemat använder NetTcpBinding. Du kan åsidosätta inställningarna i en lokal App.config- eller Web.config-fil.

Varje element i <protocolMappings> avsnittet måste ange ett schema och en bindning. Du kan också ange ett bindingConfiguration attribut som anger en bindningskonfiguration i <bindings> avsnittet i konfigurationsfilen. Om nej bindingConfiguration anges används den anonyma bindningskonfigurationen för lämplig bindningstyp.

Tjänstbeteenden konfigureras för standardslutpunkterna med hjälp av anonyma <behavior> avsnitt i <serviceBehaviors> avsnitt. Alla icke namngivna <behavior> element i <serviceBehaviors> används för att konfigurera tjänstbeteenden. Följande konfigurationsfil möjliggör till exempel publicering av tjänstmetadata för alla tjänster i värden.

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

Slutpunktsbeteenden konfigureras med hjälp av anonyma <behavior> avsnitt i <serviceBehaviors> avsnitt.

Följande exempel är en konfigurationsfil som motsvarar den i början av det här avsnittet som använder den förenklade konfigurationsmodellen.

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

Viktigt!

Den här funktionen gäller endast WCF-tjänstkonfiguration, inte klientkonfiguration. De flesta gånger genereras WCF-klientkonfigurationen av ett verktyg som svcutil.exe eller lägga till en tjänstreferens från Visual Studio. Om du konfigurerar en WCF-klient manuellt måste du lägga till ett <klientelement> i konfigurationen och ange de slutpunkter som du vill anropa.

Se även