Compartir a través de


Utilización de ServiceThrottlingBehavior para controlar el rendimiento de los servicios WCF

La clase ServiceThrottlingBehavior expone las propiedades que pueden utilizarse para limitar cuántas instancias o sesiones se crean en el nivel de la aplicación. Con este comportamiento, se precisa el rendimiento de su aplicación Windows Communication Foundation (WCF).

Control de las instancias del servicio y las llamadas simultáneas

Utilice la propiedad MaxConcurrentCalls para especificar el número máximo de mensajes que se procesan activamente en una clase ServiceHost, y la propiedad MaxConcurrentInstances para especificar el número máximo de objetos InstanceContext del servicio.

Dado que, normalmente, el establecimiento de los valores de estas propiedades se produce después de la experiencia real de ejecutar la aplicación frente a las cargas, los valores de las propiedades ServiceThrottlingBehavior se especifican, habitualmente, en un archivo de configuración de la aplicación que utiliza el elemento <serviceThrottling>.

El siguiente ejemplo de código muestra el uso de la clase ServiceThrottlingBehavior de un archivo de configuración de la aplicación que establece el valor 1 en MaxConcurrentSessions, MaxConcurrentCalls, y las propiedades MaxConcurrentInstances, como ejemplo banal. La experiencia real determina los valores óptimos para cualquier aplicación determinada.

<configuration>
  <appSettings>
    <!-- use appSetting to configure base address provided by host -->
    <add key="baseAddress" value="http://localhost:8080/ServiceMetadata" />
  </appSettings>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="Throttled" >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
         />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
         />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior  name="Throttled">
          <serviceThrottling 
            maxConcurrentCalls="1" 
            maxConcurrentSessions="1" 
            maxConcurrentInstances="1"
          />
          <serviceMetadata 
            httpGetEnabled="true" 
            httpGetUrl=""
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

El comportamiento de tiempo de ejecución exacto depende en los valores de ConcurrencyMode y las propiedades InstanceContextMode, que controlan cuántos mensajes pueden ejecutarse al mismo tiempo en una operación, y las duraciones del servicio InstanceContext en relación a las sesiones del canal de entrada, respectivamente.

Para obtener información detallada, vea MaxConcurrentCalls, y MaxConcurrentInstances.

Consulte también