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.