Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 evenwichtig geladen worden met behulp van standaard load balancing technieken, waaronder software load balancers zoals Windows Network Load Balancing en hardwaregebaseerde load balancing apparaten.
In de volgende secties worden overwegingen met betrekking tot load balancing van WCF-toepassingen besproken, die zijn gebouwd met behulp van verschillende door het systeem geleverde bindingen.
Taakverdeling met de Basic HTTP-binding
Vanuit het perspectief van load balancing zijn WCF-toepassingen die communiceren met behulp van de BasicHttpBinding niet anders dan andere gangbare 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 stuurt de BasicHttpBinding een verbinding-HTTP-header 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 kunnen met HTTP-loadbalancing-technieken worden gebalanceerd, mits de standaardbindingsconfiguratie meerdere aanpassingen ondergaat.
Schakel Instelling beveiligingscontext uit of gebruik statusgebaseerde beveiligingssessies. De beveiligingscontext kan worden uitgeschakeld door de EstablishSecurityContext-eigenschap op het WSHttpBinding op
falsein te stellen. Als u gebruikmaakt van WSDualHttpBinding of als beveiligingssessies vereist zijn, is het mogelijk om stateful beveiligingssessies te 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 Binding gebruiken, omdat de benodigde configuratie-instellingen niet beschikbaar worden gemaakt op de door het systeem geleverde WSHttpBinding en WSDualHttpBinding.Als u de beveiligingscontext-instelling uitschakelt, moet u servicepas-onderhandeling ook uitschakelen. Als u de eigenschap wilt uitschakelen, stelt u de NegotiateServiceCredential eigenschap in op WSHttpBinding
false. Als u servicereferentieonderhandeling wilt uitschakelen, moet u mogelijk expliciet de eindpuntidentiteit op de client opgeven.Gebruik geen betrouwbare sessies. Deze functie is standaard uitgeschakeld.
Lastverdeling van de Net.TCP-binding
De NetTcpBinding taakverdeling kan worden verdeeld met behulp van IP-laag-taakverdelingstechnieken. Echter, de NetTcpBinding maakt standaard gebruik van een pool van TCP-verbindingen om de verbindingslatentie te verminderen. Dit is een optimalisatie die het basismechanisme van taakverdeling verstoort. De primaire configuratiewaarde voor het optimaliseren van de NetTcpBinding is de time-out voor de lease, die deel uitmaakt van de instellingen voor de verbindingspool. Bij groepsgewijze verbindingen worden clientverbindingen 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. Overweeg bij het gebruik van NetTcpBinding in loadgebalanceerde scenario's de standaard lease-time-out die door de binding wordt gebruikt te verminderen. 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's voor meer informatie over de time-out van de kanaallease en andere transportquota's.
Voor de beste prestaties in scenario's met gelijke taakverdeling kunt u overwegen om NetTcpSecurity te gebruiken (ofwel Transport of TransportWithMessageCredential).