Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un modo per aumentare la capacità delle applicazioni Windows Communication Foundation (WCF) consiste nel ridimensionarle distribuendole in una server farm con carico bilanciato. Le applicazioni WCF possono essere bilanciate con tecniche di bilanciamento del carico standard, inclusi servizi di bilanciamento del carico software, ad esempio bilanciamento del carico di rete Windows e appliance di bilanciamento del carico basate su hardware.
Le sezioni seguenti illustrano le considerazioni relative al bilanciamento del carico delle applicazioni WCF compilate usando varie associazioni fornite dal sistema.
Bilanciamento del carico con il binding HTTP di base
Dal punto di vista del bilanciamento del carico, le applicazioni WCF che comunicano usando BasicHttpBinding non sono diverse da altri tipi comuni di traffico di rete HTTP (contenuto HTML statico, pagine ASP.NET o servizi Web ASMX). I canali WCF che utilizzano questa associazione sono privi di stato per natura e terminano le loro connessioni quando il canale si chiude. Di conseguenza, funziona BasicHttpBinding bene con le tecniche di bilanciamento del carico HTTP esistenti.
Per impostazione predefinita, BasicHttpBinding invia un'intestazione HTTP di connessione nei messaggi con il valore Keep-Alive, che consente ai client di stabilire connessioni persistenti verso i servizi che le supportano. Questa configurazione offre una velocità effettiva avanzata perché le connessioni stabilite in precedenza possono essere riutilizzate per inviare messaggi successivi allo stesso server. Tuttavia, il riutilizzo delle connessioni può causare la forte associazione dei client a un server specifico all'interno della farm con carico bilanciato, riducendo così l'efficacia del bilanciamento del carico round robin. Se questo comportamento è indesiderato, HTTP Keep-Alive può essere disabilitato sul server utilizzando la proprietà KeepAliveEnabled con un CustomBinding o una proprietà definita dall'utente Binding. Nell'esempio seguente viene illustrato come eseguire questa operazione usando la configurazione.
<?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>
Usando la configurazione semplificata introdotta in .NET Framework 4, è possibile eseguire lo stesso comportamento usando la configurazione semplificata seguente.
<?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>
Per altre informazioni su endpoint, associazioni e comportamenti predefiniti, vedere Configurazione semplificata e configurazione semplificata per i servizi WCF.
Bilanciamento del carico con il binding WSHttp e il binding WSDualHttp
Entrambe le WSHttpBinding e le WSDualHttpBinding possono essere bilanciate utilizzando tecniche di bilanciamento del carico HTTP, a condizione che vengano apportate diverse modifiche alla configurazione di binding predefinita.
Disattivare la definizione del contesto di sicurezza o usare sessioni di sicurezza con stato. La creazione del contesto di sicurezza può essere disattivata impostando la proprietà EstablishSecurityContext su WSHttpBinding
false. Se si usano WSDualHttpBinding o sono necessarie sessioni di sicurezza, è possibile utilizzare sessioni di sicurezza con stato, come descritto in Sessioni sicure. Le sessioni di sicurezza con stato consentono al servizio di rimanere senza stato, poiché tutto lo stato della sessione di sicurezza viene trasmesso con ogni richiesta come parte del token di sicurezza. Per abilitare una sessione di sicurezza con stato, è necessario usare un CustomBinding o un Binding definito dall'utente, poiché le impostazioni di configurazione necessarie non vengono esposte nei WSHttpBinding e WSDualHttpBinding forniti dal sistema.Se si disattiva l'impostazione del contesto di sicurezza, è anche necessario disattivare la negoziazione delle credenziali del servizio. Per disattivarla, impostare la proprietà NegotiateServiceCredential su WSHttpBinding nel
false. Per disabilitare la negoziazione delle credenziali del servizio, potrebbe essere necessario specificare in modo esplicito l'identità dell'endpoint nel client.Non usare sessioni affidabili. Questa funzionalità è disattivata per impostazione predefinita.
Bilanciamento del carico per il binding Net.TCP
NetTcpBinding può essere bilanciato del carico usando tecniche di bilanciamento del carico a livello IP. Tuttavia, per impostazione predefinita, i NetTcpBinding pool di connessioni TCP riducono la latenza di connessione. Si tratta di un'ottimizzazione che interferisce con il meccanismo di base del bilanciamento del carico. Il valore di configurazione principale per l'ottimizzazione di NetTcpBinding è il timeout del lease, che fa parte delle impostazioni del pool di connessioni. Il pool di connessioni fa sì che le connessioni client diventino associate a server specifici all'interno della farm. Man mano che la durata di tali connessioni aumenta (un fattore controllato dall'impostazione del timeout del lease), la distribuzione del carico tra vari server della farm diventa sbilanciata. Di conseguenza, aumenta il tempo medio delle chiamate. Pertanto, quando si utilizza NetTcpBinding negli scenari con carico bilanciato, è consigliabile ridurre il timeout del lease predefinito utilizzato dall'associazione. Un timeout di lease di 30 secondi è un punto di partenza ragionevole per gli scenari con carico bilanciato, anche se il valore ottimale dipende dall'applicazione. Per ulteriori informazioni sul timeout della concessione del canale e su altre quote di trasporto, consultare Quote di trasporto.
Per ottenere prestazioni ottimali negli scenari con carico bilanciato, è consigliabile usare NetTcpSecurity ( Transport o TransportWithMessageCredential).