Service Throttling

Como mi Ingles no es nada bueno, cuando vi por primera vez este termino en WCF, no tenia ni idea de lo que queria decir, peor fue cuando fui a la Wikipedia y vi lo que queria decir «valvula reguladora», asi que fue peor.

Bueno Throttling es una técnica que permite la restricción de clientes de un servicio WCF y nos permite restringir a travès de tres parametros en el fichero de configuración del hosting del servicio. Estos parametros son:

  1. Concurrencia máxima de sesiones : numero de sesiones que pueden ser activadas
  2. Concurrencia máxima de llamadas : Este valor representa el numero de mensajes que pueden ser concurrentes para ser procesados por todas las instancias de tu servicio
  3. Concurrencia máxima de instancias: Este valor represenat el maximo numero de instancias de tu servicio que pueden estar. El numero de instancias dependera del atributo InstanceContextMode

Por defecto esta configurado con los siguientes valores

 

<behaviors>
<serviceBehaviors>
<behavior name="DefaultThrottlingBehavior">
<serviceThrottling maxConcurrentCalls="16"
maxConcurrentSessions="10"
maxConcurrentInstances="<Int32.MaxValue>" />
</behavior>
</serviceBehaviors>
</behaviors>
Estos valores tambien se pueden asignar por codigo la manera de hacerlo seria:
Uri baseAddress = new Uri(ConfigurationManager.AppSettings["baseAddress"]);

using (ServiceHost serviceHost = new ServiceHost(typeof(SampleService), baseAddress))
{
try
{
ServiceThrottlingBehavior throttle = serviceHost.Description.Behaviors.Find<ServiceThrottlingBehavior>();
if (throttle == null)
{
throttle = new ServiceThrottlingBehavior();
throttle.MaxConcurrentCalls = 1;
throttle.MaxConnections = 1;
throttle.MaxInstances = 1;
throttle.MaxPendingOperations = 1;
serviceHost.Description.Behaviors.Add(throttle);
}
else
Console.WriteLine("Ya se ha configurado Service Throrrling.");

serviceHost.Open();

Console.WriteLine("El servicio esta OK.");
Console.WriteLine("Pulsa Enter para salir.");
Console.WriteLine();
Console.ReadLine();

serviceHost.Close();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("Time Out del servicio. " + timeProblem.Message);
}
catch (CommunicationException commProblem)
{
Console.WriteLine("Hay un problema de comunicacion. " + commProblem.Message);
}
}
 
Este comportamiento hay que tenerlo bastante en cuenta porque puede conducirnos a errores 
muy dificles de descubrir si no lo conocemos

4 comentarios sobre “Service Throttling”

Responder a oalvarez Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *