servicemodel example configurar app c# wcf wcf-configuration servicebehavior

c# - example - wcf service binding configuration



WCF ConcurrencyMode Single y InstanceContextMode PerCall (2)

Lo que tenga allí resultará en una nueva instancia del servicio que se desencadena con cada solicitud (eso es lo que hace PerCall).

Esto debería hacerlo:

[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single, InstanceContextMode=InstanceContextMode.Single)]

Para tu información, si haces esto perderás toda escalabilidad. Tendrá una única instancia de un servicio de un solo hilo para responder a todas las solicitudes.

Tengo un problema con mi configuración de servicio wcf. Me gustaría que cada llamada a mi servicio cree una nueva instancia del servicio. Para la concurrencia me gustaría que una llamada se termine antes de que comience otra.

Por lo tanto si tengo un servicio como este:

[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single, InstanceContextMode=InstanceContextMode.PerCall)] public class MyService: IMyService { public bool MyServiceOp() { Debug.WriteLine("thread "+ Thread.CurrentThread.ManagedThreadId.ToString()); Debug.WriteLine("start operation "); Do_work() Debug.WriteLine("end operation"); return true; } }

Cuando lo llamo con varias llamadas en un bucle, la traza da:

thread 1 thread 2 start operation start operation end operation end operation

Mientras me gustaría tener esto:

thread 1 start operation end operation thread 2 start operation end operation

es posible? Gracias


Sé que esta pregunta fue marcada como contestada, pero hay una mejor alternativa :

Si usa un InstanceContextMode.Single, entonces reutilizará la misma instancia para todas las llamadas. Si su servicio se está ejecutando durante mucho tiempo, esto requiere que su código administre los recursos perfectamente, ya que nunca se recolectará la basura sin reiniciar el servicio.

En su lugar, mantenga el InstanceContextMode.PerCall para "cada llamada a mi servicio crea una nueva instancia" y luego use la regulación: establezca el máximo de instancias concurrentes en 1 . La documentación de MSDN hace exactamente esto como uno de los ejemplos.