Freigeben über


Optimieren der WCF-Webdienst-Performance

WCF-Dienste machen zahlreiche Konfigurationsparameter verfügbar, die sich auf die Leistung auswirken. Dieses Thema enthält allgemeine Anleitungen zum Festlegen optimaler Werte für diese Konfigurationsparameter, um die Leistung von WCF-Diensten zu verbessern.

Implementierung des Dienstdrosselungsverhaltens für WCF-Back-End-Dienste

Implementierung von Verhalten der Dienstbegrenzung für WCF-Back-End-Dienste. Mit der Dienstdrosselung können Sie die Last auf Ihren Back-End-WCF-Servern gleichmäßiger verteilen und die Ressourcenzuordnung erzwingen. Das Diensteinschränkungsverhalten für Backend-WCF-Dienste wird konfiguriert, indem die Werte der Parameter maxConcurrentCalls, maxConcurrentSessions und maxConcurrentInstances in der Konfigurationsdatei für den WCF-Dienst geändert werden. Legen Sie "maxConcurrentCalls", "maxConcurrentSessions" und "maxConcurrentInstances" auf einen Wert fest, der größer als 16 * die Anzahl der CPUs oder CPU-Kerne ist. Legen Sie beispielsweise auf einem Computer mit 8 CPU-Kernen "maxConcurrentCalls", "maxConcurrentSessions" und "maxConcurrentInstances " wie folgt einen Wert fest, der größer als 128 (16 * 8 = 128) ist:

<serviceThrottling
maxConcurrentCalls="200"
maxConcurrentSessions="200"
maxConcurrentInstances="200" />

Erhöhen der Standardwerte für die Eigenschaften NetTcpBinding.ListenBacklog und NetTcpBinding.MaxConnections im Back-End-WCF-Dienst web.config Datei

Die NetTcpBinding.ListenBacklog-Eigenschaft steuert die maximale Anzahl von Verbindungsanforderungen in der Warteschlange, die für einen Webdienst ausstehen können. Die NetTcpBinding.MaxConnections-Eigenschaft steuert die maximale Anzahl von Verbindungen, die für die nachfolgende Wiederverwendung auf dem Client zusammengefasst werden sollen, und die maximale Anzahl von Verbindungen, die für die Versendung auf dem Server ausstehen dürfen. Jede dieser Eigenschaften verwendet einen Standardwert von 10, der möglicherweise suboptimal sein kann, insbesondere für Dokumentverarbeitungsszenarien, die einen hohen Durchsatz erfordern.

Erwägen Sie das Erhöhen des Standardwerts dieser Eigenschaften für Szenarien mit hohem Durchsatz, Dokumentverarbeitungsszenarien, die WCF-Dienste verwenden, die die netTcpBinding-Bindungsklasse implementieren.

Im folgenden Beispiel werden sowohl die Parameter "listenBacklog " als auch " maxConnections " auf den Wert "200" festgelegt.

<netTcpBinding>
   <binding name="netTcpBinding"
      closeTimeout="00:10:00"
      openTimeout="00:10:00"
      receiveTimeout="00:10:00"
      sendTimeout="00:10:00"
      transactionFlow="false"
      transferMode="Buffered"
      transactionProtocol="OleTransactions"
      hostNameComparisonMode="StrongWildcard"
      listenBacklog="200"
      maxBufferPoolSize="1048576"
      maxBufferSize="10485760"
      maxConnections="200"
      maxReceivedMessageSize="10485760">
      <readerQuotas
         maxDepth="32"
         maxStringContentLength="8192"
         maxArrayLength="16384"
         maxBytesPerRead="4096"
         maxNameTableCharCount="16384" />
      <reliableSession
         ordered="true"
         inactivityTimeout="00:10:00"
         enabled="false" />
      <security mode="None">
         <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
         <message clientCredentialType="Windows" />
      </security>
   </binding>
</netTcpBinding>

Weitere Informationen zur NetTcpBinding.ListenBacklog-Eigenschaft finden Sie unter NetTcpBinding.ListenBacklog-Eigenschaft.

Weitere Informationen zur NetTcpBinding.MaxConnections-Eigenschaft finden Sie unter NetTcpBinding.MaxConnections-Eigenschaft.

Entfernen sie ASP.NET httpModule, die nicht zum Ausführen von WCF-Webdiensten erforderlich sind

Standardmäßig werden mehrere ASP.NET httpModule in der Anforderungspipeline in IIS 6.0 und in der klassischen oder integrierten Pipeline in IIS 7.5/7.0 definiert. Diese Komponenten können alle eingehenden Anforderungen abfangen und verarbeiten. Die Standardmodule werden in der web.config Datei definiert, die in der %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG-Ordner für 32-Bit-ASP.NET-Anwendungen und im %windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG-Ordner für 64-Bit-ASP.NET-Anwendungen enthalten ist, wie im folgenden Codeausschnitt dargestellt.

<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
<add name="RoleManager" type="System.Web.Security.RoleManagerModule"/>
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule"/>
<add name="Profile" type="System.Web.Profile.ProfileModule"/>
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</httpModules>

In den meisten Szenarien ist es nicht erforderlich, alle diese Module zu laden. Daher ist es möglich, die Leistung zu verbessern, indem die folgenden httpModule beim Ausführen von WCF-Webdiensten eliminiert werden:

  • Sitzung

  • WindowsAuthentication

  • Formularauthentifizierung

  • Passport-Authentifizierung

  • Rollenmanager

  • Anonyme Identifikation

  • Profil

Weitere Informationen zur Verwendung der asynchronen WCF-HTTP-Module/-Handler zur Verbesserung der Skalierbarkeit von gehosteten IIS 7.5/7.0-WCF-Diensten finden Sie im Blog Orcas SP1 von Wenlong Dong: Asynchrones WCF-HTTP-Modul/-Handler für IIS7 für bessere Serverskalierbarkeit.

Siehe auch

Optimieren der Leistung des BizTalk Server WCF-Adapters