Lastenausgleich

Eine Möglichkeit, die Kapazität von Windows Communication Foundation (WCF)-Anwendungen zu erhöhen, besteht darin, sie dezentral zu skalieren und in einer Serverfarm mit Lastenausgleich bereitzustellen.WCF-Anwendungen können mit Standardverfahren zum Lastenausgleich entsprechend ausgeglichen werden. Dazu gehören Softwarelastenausgleichsmodule wie Windows Network Load Balancing sowie hardwarebasierte Anwendungen zum Lastenausgleich.

In den folgenden Abschnitten werden Überlegungen für den Lastenausgleich von WCF-Anwendungen erläutert, der mit verschiedenen vom System bereitgestellten Bindungen erzielt wird.

Lastenausgleich mit der Basic-HTTP-Bindung

Aus der Sicht des Lastenausgleichs unterscheiden sich WCF-Anwendungen, die mithilfe von BasicHttpBinding kommunizieren, nicht von anderen gängigen Arten des HTTP-Netzwerkdatenverkehrs (statischem HTML-Inhalt, ASP.NET-Seiten oder ASMX-Webdiensten).WCF-Kanäle, die diese Bindung verwenden, weisen grundsätzlich keinen Zustand auf und beenden ihre Verbindungen, wenn der Kanal geschlossen wird.Daher funktioniert die BasicHttpBinding gut mit vorhandenen HTTP-Lastenausgleichstechniken.

Standardmäßig sendet die BasicHttpBinding einen HTTP-Verbindungsheader in Nachrichten mit einem Keep-Alive-Wert, der Clients ermöglicht, permanente Verbindungen zu den Diensten herzustellen, die sie unterstützen.Diese Konfiguration bietet einen höheren Durchsatz, da zuvor hergestellte Verbindungen erneut verwendet werden können, um nachfolgende Nachrichten an denselben Server zu senden.Die Wiederverwendung der Verbindung kann jedoch dazu führen, dass Clients eng mit einem bestimmten Server innerhalb der Serverfarm mit Lastenausgleich verbunden werden, was die Effektivität des Roundrobin-Lastenausgleichs reduziert.Wenn dieses Verhalten unerwünscht ist, kann HTTP Keep-Alive auf dem Server deaktiviert werden, indem die KeepAliveEnabled-Eigenschaft mit einer CustomBinding oder einer benutzerdefinierten Binding verwendet wird.Im folgenden Beispiel wird gezeigt, wie dieser Vorgang unter Verwendung der Konfiguration ausgeführt wird.

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

Wenn Sie die in .NET Framework 4 eingeführte vereinfachte Konfiguration verwenden, kann das gleiche Verhalten mit der folgenden vereinfachten Konfiguration erreicht werden.

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

Weitere Informationen finden Sie unter zu Standardendpunkten, Bindungen und Verhaltensweisen finden Sie unter Vereinfachte Konfiguration und Vereinfachte Konfiguration für WCF-Dienste.

Lastenausgleich mit der WSHttp-Bindung und der WSDualHttp-Bindung

Sowohl die WSHttpBinding als auch die WSDualHttpBinding können mit HTTP-Lastenausgleichstechniken ausgeglichen werden, vorausgesetzt, an der Standardbindungskonfiguration werden einige Änderungen vorgenommen.

  • Sicherheitskontexterstellung deaktivieren: Dies kann durch Festlegen der EstablishSecurityContext-Eigenschaft der WSHttpBinding auf false erreicht werden.Wenn Sicherheitssitzungen erforderlich sind, ist es auch möglich, zustandsbehaftete Sicherheitssitzungen zu verwenden, wie im Thema Sichere Sitzungen beschrieben.Zustandsbehaftete Sicherheitssitzungen ermöglichen dem Dienst, zustandsfrei zu bleiben, da der gesamte Zustand für die Sicherheitssitzung mit jeder Anforderung als Teil des Schutzsicherheitstokens übertragen wird.Zum Aktivieren einer zustandsbehafteten Sicherheitssitzung muss eine CustomBinding oder eine benutzerdefinierte Binding verwendet werden, da die erforderlichen Konfigurationseinstellungen nicht für die vom System bereitgestellte WSHttpBinding und WSDualHttpBinding verfügbar gemacht werden.

  • Verwenden Sie keine zuverlässigen Sitzungen.Diese Funktion ist standardmäßig deaktiviert.

Lastenausgleich der Net.TCP-Bindung

Die NetTcpBinding kann mit Lastenausgleichstechniken der IP-Ebene ausgeglichen werden.Die NetTcpBinding legt jedoch TCP-Verbindungen standardmäßig zusammen, um die Verbindungswartezeit zu reduzieren.Dies ist eine Optimierung, die den grundlegenden Mechanismus des Lastenausgleichs behindert.Der primäre Konfigurationswert zur Optimierung der NetTcpBinding ist der Leasetimeout, der zu den Verbindungspooleinstellungen gehört.Verbindungspooling bewirkt, dass Clientverbindungen bestimmten Servern innerhalb der Farm zugeordnet werden.Mit steigender Lebensdauer dieser Verbindung (ein Faktor, der von der Leasetimeout-Einstellung gesteuert wird) wird die Lastenverteilung über die verschiedenen Server auf der Farm zunehmend unausgeglichen.Demzufolge steigt die durchschnittliche Aufrufzeit.Erwägen Sie daher bei der Verwendung der NetTcpBinding in Lastenausgleichsszenarien, den von der Bindung verwendeten Leasetimeout-Standardwert zu reduzieren.Ein 30 Sekunden dauernder Leasetimeout ist ein angemessener Ausgangspunkt für Lastenausgleichsszenarien. Der optimale Wert richtet sich jedoch nach der jeweiligen Anwendung.Weitere Informationen über den Kanal-Leasetimeout und andere Transportkontingente finden Sie unter Transportkontingente.

Erwägen Sie, für die optimale Leistung in Lastenausgleichsszenarien NetTcpSecurity ( SecurityMode oder SecurityMode) zu verwenden.

Siehe auch

Empfohlene Vorgehensweisen für das Hosten in Internetinformationsdiensten