Delen via


Taakverdeling

Een manier om de capaciteit van WCF-toepassingen (Windows Communication Foundation) te vergroten, is door ze te implementeren in een serverfarm met gelijke taakverdeling. WCF-toepassingen kunnen worden verdeeld met behulp van standaardtaakverdelingstechnieken, waaronder software load balancers zoals Windows-netwerktaakverdeling en hardwaregebaseerde taakverdelingsapparaten.

In de volgende secties worden overwegingen besproken voor het verdelen van WCF-toepassingen die zijn gebouwd met behulp van verschillende door het systeem geleverde bindingen.

Taakverdeling met de Basic HTTP-binding

Vanuit het perspectief van taakverdeling zijn WCF-toepassingen die communiceren met behulp van de BasicHttpBinding toepassingen niet anders dan andere algemene typen HTTP-netwerkverkeer (statische HTML-inhoud, ASP.NET pagina's of ASMX-webservices). WCF-kanalen die deze binding gebruiken, zijn inherent staatloos en beëindigen hun verbindingen wanneer het kanaal wordt gesloten. Als zodanig werkt het BasicHttpBinding goed met bestaande HTTP-taakverdelingstechnieken.

Standaard verzendt de http-header van de BasicHttpBinding verbinding in berichten met een Keep-Alive waarde, waarmee clients permanente verbindingen tot stand kunnen brengen met de services die deze ondersteunen. Deze configuratie biedt verbeterde doorvoer omdat eerder tot stand gebrachte verbindingen opnieuw kunnen worden gebruikt om volgende berichten naar dezelfde server te verzenden. Het hergebruik van verbindingen kan er echter toe leiden dat clients sterk worden gekoppeld aan een specifieke server in de farm met gelijke taakverdeling, waardoor de effectiviteit van round robin-taakverdeling wordt verminderd. Als dit gedrag ongewenst is, kan HTTP Keep-Alive worden uitgeschakeld op de server met behulp van de KeepAliveEnabled eigenschap met een CustomBinding of door de gebruiker gedefinieerde Bindingeigenschap. In het volgende voorbeeld ziet u hoe u dit doet met behulp van de configuratie.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  
 <system.serviceModel>  
  <services>  
   <service
     name="Microsoft.ServiceModel.Samples.CalculatorService"  
     behaviorConfiguration="CalculatorServiceBehavior">  
     <host>  
      <baseAddresses>  
       <add baseAddress="http://localhost:8000/servicemodelsamples/service"/>  
      </baseAddresses>  
     </host>  
    <!-- configure http endpoint, use base address provided by host  
         And the customBinding -->  
     <endpoint address=""  
           binding="customBinding"  
           bindingConfiguration="HttpBinding"
           contract="Microsoft.ServiceModel.Samples.ICalculator" />  
   </service>  
  </services>  
  
  <bindings>  
    <customBinding>  
  
    <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
      <binding name="HttpBinding" keepAliveEnabled="False"/>  
  
    </customBinding>  
  </bindings>  
 </system.serviceModel>  
</configuration>  

Met behulp van de vereenvoudigde configuratie die is geïntroduceerd in .NET Framework 4, kan hetzelfde gedrag worden bereikt met behulp van de volgende vereenvoudigde configuratie.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
 <system.serviceModel>  
    <protocolMapping>  
      <add scheme="http" binding="customBinding" />  
    </protocolMapping>  
    <bindings>  
      <customBinding>  
  
      <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
        <binding keepAliveEnabled="False"/>  
  
      </customBinding>  
    </bindings>  
 </system.serviceModel>  
</configuration>  

Zie Vereenvoudigde configuratie en vereenvoudigde configuratie voor WCF-services voor meer informatie over standaardeindpunten, bindingen en gedrag.

Taakverdeling met de WSHttp-binding en de WSDualHttp-binding

Zowel de WSHttpBinding als de WSDualHttpBinding taakverdeling kunnen worden verdeeld met behulp van HTTP-taakverdelingstechnieken, mits er verschillende wijzigingen worden aangebracht in de standaardbindingsconfiguratie.

  • Schakel Instelling van beveiligingscontext uit of gebruik stateful beveiligingssessies. Instelling van beveiligingscontext kan worden uitgeschakeld door de EstablishSecurityContext eigenschap in te WSHttpBindingfalsestellen op . Als u gebruikmaakt WSDualHttpBinding of beveiligingssessies vereist zijn, kunt u stateful beveiligingssessies gebruiken zoals beschreven in Beveiligde sessies. Stateful beveiligingssessies maken het mogelijk dat de service staatloos blijft, omdat alle statussen voor de beveiligingssessie worden verzonden met elke aanvraag als onderdeel van het beveiligingstoken. Als u een stateful beveiligingssessie wilt inschakelen, moet u een CustomBinding of door de gebruiker gedefinieerde Bindingsessie gebruiken, omdat de benodigde configuratie-instellingen niet worden weergegeven op de door het systeem geleverde WSHttpBinding en WSDualHttpBinding.

  • Als u De instelling van beveiligingscontext uitschakelt, moet u servicereferentieonderhandeling ook uitschakelen. Als u de eigenschap wilt uitschakelen, stelt u de NegotiateServiceCredential eigenschap in op WSHttpBindingfalse. Als u servicereferentieonderhandeling wilt uitschakelen, moet u mogelijk expliciet de eindpuntidentiteit op de client opgeven.

  • Gebruik geen betrouwbare sessies. Deze functie is standaard uitgeschakeld.

Taakverdeling van de Net.TCP-binding

De NetTcpBinding taakverdeling kan worden verdeeld met behulp van IP-laag-taakverdelingstechnieken. De TCP-verbindingen van de pools worden echter standaard gebruikt om de latentie van de NetTcpBinding verbinding te verminderen. Dit is een optimalisatie die het basismechanisme van taakverdeling verstoort. De primaire configuratiewaarde voor het optimaliseren van de NetTcpBinding lease is de time-out voor de lease, die deel uitmaakt van de Verbinding maken ionpool Instellingen. Verbinding maken groepering zorgt ervoor dat clientverbindingen worden gekoppeld aan specifieke servers binnen de farm. Naarmate de levensduur van deze verbindingen toeneemt (een factor die wordt bepaald door de time-outinstelling van de lease), wordt de belastingverdeling over verschillende servers in de farm ongebalanceerd. Als gevolg hiervan neemt de gemiddelde gesprekstijd toe. Als u de NetTcpBinding scenario's met gelijke taakverdeling gebruikt, kunt u overwegen de standaardtime-out voor de lease te verminderen die door de binding wordt gebruikt. Een time-out van 30 seconden voor leases is een redelijk uitgangspunt voor scenario's met gelijke taakverdeling, hoewel de optimale waarde toepassingsafhankelijk is. Zie Transportquota voor meer informatie over de time-out van de kanaallease en andere transportquota.

Voor de beste prestaties in scenario's met gelijke taakverdeling kunt u overwegen om (of TransportTransportWithMessageCredential) te gebruiken NetTcpSecurity .

Zie ook