2009-10-09 15 views
5

Mi biblioteca de servicios WCF está alojada como un servicio de Windows y se supone que maneja las solicitudes de varios clientes. Una solicitud que los clientes realizarán con frecuencia requiere bastante recursos.WCF: solicitud de manejo de varios clientes

tengo dos dudas referentes a scenerio arriba:

  1. Como un servicio WCF maneja la petición del cliente múltiple?
  2. ¿Hay alguna configuración WCF para que el proceso sea eficiente?

¡Gracias!

Respuesta

11

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

Cuestiones relacionadas