Optimieren der Leistung eines WCF-Webdienstes
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.
Implementieren des Dienstdrosselungsverhaltens für Back-End-WCF-Dienste
Implementieren des Dienstdrosselungsverhaltens für Back-End-WCF-Dienste. Die Dienstdrosselung ermöglicht es Ihnen, die Last auf Ihren Back-End-WCF-Servern zu gleichmäßig zu machen und die Ressourcenzuordnung zu erzwingen. ServiceThrottlingverhalten für Back-End-WCF-Dienste wird konfiguriert, indem die Werte für die 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 von größer als 16 * der Anzahl der CPUs oder CPU-Kerne fest. Legen Sie beispielsweise auf einem Computer mit 8 CPU-Kernen maxConcurrentCalls, maxConcurrentSessions und maxConcurrentInstances wie folgt auf einen Wert größer als 128 (16 * 8 = 128) fest:
<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 spätere Wiederverwendung auf dem Client in einem Pool zusammengefasst werden sollen, und die maximale Anzahl von Verbindungen, die auf dem Server ausstehend sein dürfen. Jede dieser Eigenschaften verwendet einen Standardwert von 10, der möglicherweise suboptimal ist, insbesondere für Dokumentverarbeitungsszenarien, die einen hohen Durchsatz erfordern.
Erwägen Sie, den Standardwert dieser Eigenschaften für Szenarien mit hohem Durchsatz bei der Dokumentverarbeitung zu erhöhen, in denen WCF-Dienste verwendet werden, die die Bindungsklasse netTcpBinding 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 ASP.NET httpModule, die zum Ausführen von WCF-Webdiensten nicht erforderlich sind
Standardmäßig sind 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 fangen alle eingehenden Anforderungen ab und verarbeiten sie. Die Standardmodule werden in der web.config-Datei definiert, die im Ordner %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG für 32-Bit-ASP.NET-Anwendungen und im Ordner %windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG für 64-Bit-ASP.NET-Anwendungen enthalten ist, wie im folgenden Codeausschnitt gezeigt.
<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 entfernt werden:
Sitzung
WindowsAuthentication
FormsAuthentication
PassportAuthentication
RoleManager
AnonymousIdentification
Profil
Weitere Informationen zur Verwendung der asynchronen WCF-HTTP-Module/-Handler zum Verbessern der Skalierbarkeit gehosteter WCF-Dienste in IIS 7.5/7.0 finden Sie im Wenlong Dong-Blog Orcas SP1 Improvement: Asynchronous WCF HTTP Module/Handler for IIS7 for Better Server Skalierbarkeit.