Service Throttling - Blog de Oskar Alvarez

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
Published 24/4/2007 18:44 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2007/04/24/service-throttling.aspx

Comentarios

# re: Service Throttling

me salvaste la vida!!!!!!!!!!!!!!!!!!!!

funciona de 10!!!!!!

Wednesday, September 23, 2009 5:21 PM por Pablo

# re: Service Throttling

Me alegro haberte ayudado

Friday, October 02, 2009 7:47 AM por Oskar Alvarez

# re: Service Throttling

Hola Oskar.

A mi tambien me salvaste la vida.

Gracias

Wednesday, October 28, 2009 6:04 PM por Oscar

# re: Service Throttling

Muy buena Oskar,

Solucionaste un error que para mi era muy importante, visto que no me permitia enviar mi producto a produccion.

Gracias

Wednesday, November 11, 2009 5:00 PM por antmar1271