Compartir vía


Optimización del rendimiento del servicio web WCF

Los servicios WCF exponen numerosos parámetros de configuración que afectan al rendimiento. En este tema se proporcionan instrucciones generales para establecer valores óptimos para estos parámetros de configuración para mejorar el rendimiento de los servicios WCF.

Implementar el comportamiento de serviceThrottling para los servicios WCF de back-end

Implemente el comportamiento de serviceThrottling para los servicios WCF de back-end. La limitación del servicio le permite incluso salir de la carga en los servidores WCF de back-end y aplicar la asignación de recursos. El comportamiento de serviceThrottling para los servicios WCF de back-end se configura modificando los valores de los parámetros maxConcurrentCalls, maxConcurrentSessions y maxConcurrentInstances en el archivo de configuración del servicio WCF. Establezca maxConcurrentCalls, maxConcurrentSessions y maxConcurrentInstances en un valor mayor que 16 * el número de CPU o núcleos de CPU. Por ejemplo, en un equipo con 8 núcleos de CPU, establezca maxConcurrentCalls, maxConcurrentSessions y maxConcurrentInstances en un valor mayor que 128 (16 * 8 = 128) de la siguiente manera:

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

Aumente los valores predeterminados de las propiedades NetTcpBinding.ListenBacklog y NetTcpBinding.MaxConnections del servicio WCF de back-end web.config archivo

La propiedad NetTcpBinding.ListenBacklog controla el número máximo de solicitudes de conexión en cola que pueden estar pendientes para un servicio web. La propiedad NetTcpBinding.MaxConnections controla el número máximo de conexiones que se van a agrupar para su reutilización posterior en el cliente y el número máximo de conexiones que pueden estar pendientes de envío en el servidor. Cada una de estas propiedades usa un valor predeterminado de 10 que puede ser poco óptimo, especialmente para escenarios de procesamiento de documentos que requieren un alto rendimiento.

Considere la posibilidad de aumentar el valor predeterminado de estas propiedades para escenarios de procesamiento de documentos de alto rendimiento que usan servicios WCF que implementan la clase de enlace netTcpBinding .

En el ejemplo siguiente, los parámetros listenBacklog y maxConnections se establecen en un valor de "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>

Para obtener más información sobre la propiedad NetTcpBinding.ListenBacklog, vea Propiedad NetTcpBinding.ListenBacklog.

Para obtener más información sobre la propiedad NetTcpBinding.MaxConnections, vea Propiedad NetTcpBinding.MaxConnections.

Eliminar ASP.NET httpModules que no son necesarios para ejecutar servicios web WCF

De forma predeterminada, varios ASP.NET httpModules se definen en la canalización de solicitudes en IIS 6.0 y en la canalización clásica o integrada en IIS 7.5/7.0. Estos componentes interceptan y procesan todas las solicitudes entrantes. Los módulos predeterminados se definen en el archivo web.config contenido en las aplicaciones de ASP.NET %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG para aplicaciones de ASP.NET de 32 bits y en la carpeta %windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG para aplicaciones de ASP.NET de 64 bits, como se muestra en el siguiente fragmento de código.

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

En la mayoría de los escenarios, no es necesario cargar todos estos módulos. Por lo tanto, es posible mejorar el rendimiento mediante la eliminación de los siguientes httpModules al ejecutar servicios web WCF:

  • Sesión

  • WindowsAuthentication

  • FormsAuthentication

  • PassportAuthentication

  • RoleManager

  • AnonymousIdentification

  • Perfil

Para obtener más información sobre el uso de los módulos o controladores HTTP de WCF asincrónicos para mejorar la escalabilidad de los servicios WCF hospedados de IIS 7.5/7.0, consulte el blog de Wenlong Dong Orcas SP1 Improvement: Asincrónico HTTP Module/Handler for IIS7 for Better Server Scalability.

Consulte también

Optimización del rendimiento del adaptador de WCF de BizTalk Server