Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett sätt att öka kapaciteten för WCF-program (Windows Communication Foundation) är att skala ut dem genom att distribuera dem till en belastningsutjämningsservergrupp. WCF-program kan belastningsutjämnas med hjälp av standardtekniker för belastningsutjämning, inklusive lastbalanserare för programvara, till exempel Belastningsutjämning för Windows-nätverk samt maskinvarubaserade belastningsutjämningsenheter.
I följande avsnitt beskrivs överväganden för belastningsutjämning av WCF-program som skapats med hjälp av olika bindningar som tillhandahålls av systemet.
Belastningsutjämning med grundläggande HTTP-bindning
När det gäller belastningsutjämning skiljer sig WCF-program som kommunicerar med BasicHttpBinding inte från andra vanliga typer av HTTP-nätverkstrafik (statisk HTML-innehåll, ASP.NET-sidor eller ASMX-webbtjänster). WCF-kanaler som använder den här bindningen är tillståndslösa och avslutar sina anslutningar när kanalen stängs. Därför fungerar det BasicHttpBinding bra med befintliga HTTP-belastningsutjämningstekniker.
Som standardinställning skickar BasicHttpBinding en anslutning HTTP-header i meddelanden med ett Keep-Alive-värde, vilket gör det möjligt för klienter att upprätta beständiga anslutningar till de tjänster som stöder dem. Den här konfigurationen erbjuder förbättrat dataflöde eftersom tidigare etablerade anslutningar kan återanvändas för att skicka efterföljande meddelanden till samma server. Återanvändning av anslutningar kan dock leda till att klienterna blir kraftigt kopplade till en specifik server i en serverpool med belastningsutjämning, vilket minskar effektiviteten av rundturbelastningsutjämning. Om det här beteendet är oönskat kan HTTP Keep-Alive inaktiveras på servern med egenskapen KeepAliveEnabled med en CustomBinding eller användardefinierad Binding. I följande exempel visas hur du gör detta med hjälp av konfigurationen.
<?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>
Med hjälp av den förenklade konfiguration som introducerades i .NET Framework 4 kan samma beteende utföras med hjälp av följande förenklade konfiguration.
<?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>
Mer information om standardslutpunkter, bindningar och beteenden finns i Förenklad konfiguration och förenklad konfiguration för WCF-tjänster.
Belastningsutjämning med WSHttp-bindningen och WSDualHttp-bindningen
WSHttpBinding Både och WSDualHttpBinding kan belastningsutjämnas med hjälp av HTTP-belastningsutjämningstekniker förutsatt att flera ändringar görs i standardbindningskonfigurationen.
Inaktivera Etablering av säkerhetskontext eller använd tillståndskänsliga säkerhetssessioner. Etablering av säkerhetskontext kan inaktiveras genom att ställa in EstablishSecurityContext egenskapen på WSHttpBinding till
false. Om du använder WSDualHttpBinding eller om säkerhetssessioner krävs kan du använda tillståndskänsliga säkerhetssessioner enligt beskrivningen i Säkra sessioner. Statusbaserade säkerhetssessioner gör det möjligt för tjänsten att förbli statslös eftersom hela statusen för säkerhetssessionen överförs med varje begäran som en del av säkerhetsskyddstoken. Om du vill aktivera en tillståndsbaserad säkerhetssession måste du använda en CustomBinding eller användardefinierad Binding, eftersom de nödvändiga konfigurationsinställningarna inte exponeras på de systemtillhandahållna WSHttpBinding och WSDualHttpBinding.Om du inaktiverar etablering av säkerhetskontext måste du också inaktivera förhandling av tjänstautentiseringsuppgifter. Om du vill inaktivera den ställer du in NegotiateServiceCredential egenskapen på WSHttpBinding till
false. Om du vill inaktivera förhandling av tjänstautentiseringsuppgifter kan du behöva ange slutpunktsidentiteten på klienten uttryckligen.Använd inte tillförlitliga sessioner. Den här funktionen är inaktiverad som standard.
Belastningsutjämning av Net.TCP-bindningen
NetTcpBinding Kan lastbalanseras med hjälp av lastbalanseringstekniker på IP-nivå. Men NetTcpBinding poolar TCP-anslutningar som standard för att minska anslutningsfördröjningen. Det här är en optimering som stör den grundläggande mekanismen för belastningsutjämning. Det primära konfigurationsvärdet för att NetTcpBinding optimera är tidsgränsen för lån, som är en del av inställningarna för anslutningspoolen. Anslutningspooler gör att klientanslutningar associeras till specifika servrar i servergruppen. När livslängden för dessa anslutningar ökar (en faktor som styrs av tidsgränsinställningen för lån) blir belastningsfördelningen mellan olika servrar i servergruppen obalanserad. Det innebär att den genomsnittliga samtalstiden ökar. När du använder NetTcpBinding i belastningsutjämnade scenarier bör du därför överväga att minska standardtidsgränsen som används av bindningen. En leasingavbrott på 30 sekunder är en rimlig startpunkt för belastningsbalanserade scenarier, även om det optimala värdet är beroende på programmet. Mer information om tidsgränsen för kanallån och andra transportkvoter finns i Transportkvoter.
För bästa prestanda i belastningsutjämningsscenarier bör du överväga att använda NetTcpSecurity (antingen Transport eller TransportWithMessageCredential).