En su escenario predeterminado, el host del servicio WCF (el que aloja su clase de servicio) creará una nueva instancia de su clase de servicio para cada solicitud que ingrese, y permite que maneje la solicitud (activación "por llamada")
Puede ajustar el número máximo de instancias de clase de servicio activas simultáneamente utilizando el comportamiento serviceThrottling
en su servidor.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ThrottledServiceBehavior">
<serviceThrottling
maxConcurrentCalls="25"
maxConcurrentSessions="25"
maxConcurrentInstances="25"/>
</behavior>
</serviceBehaviors>
</behaviors>
Hay una muy buena explicación de las opciones del comportamiento de estrangulamiento y sus valores por defecto en Kenny Lobo de blog post here.
Además, la configuración de InstanceContextMode
y ConcurrencyMode
en su clase de servicio (que implementa el contrato de servicio) tiene una gran influencia sobre cómo su servicio manejará la concurrencia y múltiples solicitudes.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
.....
}
InstanceContextMode
debería ser PerCall
(cada solicitud llamando recibe una nueva, instancia independiente) y luego ConcurrencyMode
puede ser Single
(que es el más fácil de desarrollar).
InstanceContextMode
también podría ser PerSession
si necesita un enfoque basado en la sesión (no muy común), o Single
(la clase de servicio sería un producto único - muy desanimado a usar esto, a menos que sea absolutamente, tiene positivamente a y saber acerca de todos las peculiaridades y problemas con eso!).
ConcurrencyMode
también podría ser Reentrant
(sólo es relevante para los contratos dúplex y fijaciones) o Multiple
(multiproceso clase de servicio Singleton - altamente riesgoso y difícil de desarrollar).
Marc