c# .net wcf soa throttling

c# - WCF Service Throttling



.net soa (3)

Supongamos que estoy tratando con un servicio que implica el envío de grandes cantidades de datos.

Si implemento esto con WCF, ¿WCF acelerará el servicio en función de la cantidad de memoria que necesita cada solicitud para servir? ¿O recibiré continuas excepciones de memoria cada vez que reciba una gran cantidad de visitas a mi servicio?

Tengo bastante curiosidad por lidiar con este problema fuera de WCF, todavía soy un poco nuevo en el desarrollo de servicios ...


Al usar los atributos de encuadernación y readerQuotas como sugiere Andrew Hare, permitirá esencialmente un tamaño ilimitado para la mayoría de los usos prácticos, tenga en cuenta que se encontrará con otros problemas como tiempos de espera si acepta un comando de larga ejecución, sin importar cómo ese servicio está construido (usando WCF o no).

No importa cuál sea el tamaño de su mensaje, el servicio WCF deberá ser acelerado para que no se inunde. Si lo está alojando en IIS o WAS, tendrá características integradas adicionales para esos entornos de alojamiento que harán que su servicio sea mucho más "altamente disponible". Sin embargo, aún necesita prestar atención a los problemas de concurrencia. La siguiente configuración de WCF proporciona un ejemplo de configuración de algunos valores de aceleración.

<system.serviceModel> ... <behaviors> <serviceBehaviors> <behavior name="GenericServiceBehavior"> <serviceTimeouts transactionTimeout="00:09:10"/> <serviceThrottling maxConcurrentCalls="20" maxConcurrentSessions="20" maxConcurrentInstances="20" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>


Si está utilizando NetTCPBinding o NetNamedPipeBinding, puede usar la propiedad MaxConnections:

<bindings> <netTcpBinding> <binding name="myTCPBinding" maxConnections="15"/> </netTcpBinding> </bindings>


WCF tiene un límite de tamaño de carga útil predeterminado que rechazará los mensajes en una cierta cantidad de bytes. Esto es configurable, por supuesto, en la sección de enlace de su archivo de configuración. Aquí hay un ejemplo crudo con un basicHttpBinding que le muestra muchos de los atributos disponibles para usted:

<bindings> <basicHttpBinding> <binding name="testBinding" maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> </binding> </basicHttpBinding>

La idea es que puede crear muchos enlaces diferentes que puede usar para diferentes escenarios. Esto es bueno ya que puede ajustar cómo se consumen sus servicios y solo aumentar el límite de tamaño de mensaje para los puntos finales que los necesitan.