Partager via


Optimisation des performances du service web WCF

Les services WCF exposent de nombreux paramètres de configuration qui affectent les performances. Cette rubrique fournit des conseils généraux pour définir des valeurs optimales pour ces paramètres de configuration afin d’améliorer les performances des services WCF.

Implémenter le comportement serviceThrottling pour les services WCF back-end

Implémentez le comportement serviceThrottling pour les services WCF back-end. La limitation de service vous permet d’équilibrer la charge sur vos serveurs WCF principaux et d’appliquer l’allocation de ressources. Le comportement serviceThrottling pour les services WCF principaux est configuré en modifiant les valeurs des paramètres maxConcurrentCalls, maxConcurrentSessions et maxConcurrentInstances dans le fichier de configuration du service WCF. Définissez maxConcurrentCalls, maxConcurrentSessions et maxConcurrentInstances sur une valeur supérieure à 16 * le nombre de processeurs ou de cœurs d’UC. Par exemple, sur un ordinateur avec 8 cœurs de processeur, définissez maxConcurrentCalls, maxConcurrentSessions et maxConcurrentInstances sur une valeur supérieure à 128 (16 * 8 = 128) comme suit :

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

Augmenter les valeurs par défaut pour les propriétés NetTcpBinding.ListenBacklog et NetTcpBinding.MaxConnections dans le fichier de web.config du service WCF back-end

La propriété NetTcpBinding.ListenBacklog contrôle le nombre maximal de demandes de connexion mises en file d’attente qui peuvent être en attente pour un service Web. La propriété NetTcpBinding.MaxConnections contrôle le nombre maximal de connexions à mettre en pool pour une réutilisation ultérieure sur le client et le nombre maximal de connexions autorisées à être en attente de dispatch sur le serveur. Chacune de ces propriétés utilise une valeur par défaut de 10, ce qui peut être non optimal, en particulier pour les scénarios de traitement de documents qui nécessitent un débit élevé.

Envisagez d’augmenter la valeur par défaut de ces propriétés pour les scénarios de traitement de documents à haut débit qui utilisent des services WCF qui implémentent la classe de liaison netTcpBinding .

Dans l’exemple suivant, les paramètres listenBacklog et maxConnections ont la valeur « 200 ».

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

Pour plus d’informations sur la propriété NetTcpBinding.ListenBacklog, consultez NetTcpBinding.ListenBacklog, propriété.

Pour plus d’informations sur la propriété NetTcpBinding.MaxConnections, consultez NetTcpBinding.MaxConnections, propriété.

Éliminer les ASP.NET httpModules qui ne sont pas nécessaires pour exécuter les services Web WCF

Par défaut, plusieurs ASP.NET httpModules sont définis dans le pipeline de requête dans IIS 6.0 et dans le pipeline classique ou intégré dans IIS 7.5/7.0. Ces composants interceptent et traitent toutes les demandes entrantes. Les modules par défaut sont définis dans le fichier web.config contenu dans le dossier %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG pour les applications ASP.NET 32 bits et dans le dossier %windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG pour les applications ASP.NET 64 bits, comme illustré par l’extrait de code suivant.

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

Dans la plupart des scénarios, il n’est pas nécessaire de charger tous ces modules. Par conséquent, il est possible d’améliorer les performances en éliminant les httpModules suivants lors de l’exécution des services Web WCF :

  • session

  • WindowsAuthentication

  • FormsAuthentication

  • PassportAuthentication

  • RoleManager

  • AnonymousIdentification

  • Profil

Pour plus d’informations sur l’utilisation des modules/gestionnaires HTTP WCF asynchrones afin d’améliorer la scalabilité des services WCF hébergés par IIS 7.5/7.0, consultez le blog de Wenlong Dong Orcas SP1 Improvement : Asynchrone WCF HTTP Module/Handler for IIS7 for IIS7 for Better Server Scalability.

Voir aussi

Optimisation des performances de l’adaptateur WCF de BizTalk Server