2010-03-16 39 views
18

Tengo un servicio WCF implementado en una aplicación de consola con BasicHTTPBinding y SSL habilitado. El siguiente atributo se establece así:WCF Service Throttling

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

También he creado el comportamiento de estrangulación a

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

Por otro lado he creado un cliente de prueba (para prueba de carga) que inicia simultáneamente a varios clientes (múltiples hilos) y realiza transacciones en el servidor. Todo parece correcto, pero en el servidor la utilización de la CPU no aumenta, así que agregué algunos registros para ver el número de llamadas simultáneas al servidor y encontré que nunca superó 6.

He revisado el código de registro del contador de rendimiento más más de dos veces y me parece bien.

Así que quiero preguntar dónde está el problema en esta situación? Aún no he especificado ningún tipo de ContextMode o ConcurrencyMode.

Después de este post noté que cada vez que inicio otro Intance of Test Client mi contador de llamadas de servidor concurrentes aumenta a 2, como si solo ejecuto 1 instancia, el máximo de llamadas simultáneas de Rcvd será 2 y si hay dos instancias iguales el valor va a 4 y así sucesivamente. ¿Hay algún límite de Número de llamadas WCF desde el proceso una vez?

******** Agregado el 17 de marzo ********

Hoy me encontré con otra prueba con un cliente de prueba (con 50 usuarios simultáneos) en la misma máquina en la que el servidor se está ejecutando. Esta vez estoy obteniendo el resultado exacto de lo que quería que se muestre (es decir, Maximum concurrent Calls Rcvd by Server = 50).

Pero también tengo que hacer lo mismo en otras máquinas. ¿Puede alguien ayudarme con esto?

Respuesta

18

Encontré una solución: hay un límite de conexión en ServicePointManager que causaba este problema. Para eliminar este límite sólo tiene que establecer

System.Net.ServicePointManager.DefaultConnectionLimit = X; 

donde el límite por defecto es 2.

+4

De @JuliaS: ¿A dónde va esta línea? ¿Es esto una configuración de servicio de cliente o WCF? –

+1

perdón por la respuesta tardía: esto va a cualquier aplicación .net que hace conexión de salida concurrente múltiple a cualquier servidor. –

22

O utilice esta configuración en el cliente.

<system.net> 
    <connectionManagement> 
     <add maxconnection = "200" address ="*" /> 
    </connectionManagement> 
    </system.net> 

Aquí 200 es el límite desde el cliente

+0

Se describe aquí http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx y tal vez necesite conocer este http://support.microsoft.com/kb/969189 –

+0

MSDN: [ Element (Configuración de red)] (https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx) –

+0

Agregué maxconnection = "100" address = "*" pero no tuve suerte al obtener error de tiempo de espera en WCF –