2012-04-16 15 views
8

Si se produce más de una solicitud de diferentes clientes simultáneamente, el valor de Hub.Context.ConnectionId cambia durante la ejecución del controlador.En SignalR is Hub.Context thread safe?

Digamos que tengo 2 clientes conectados con los Ids A y B del cliente, y tengo un método en mi Hub llamado foo(). Envío una solicitud desde A al Servidor invocando a foo(), luego, mientras se procesa la solicitud de A, envío una solicitud de B invocando a foo(). Al inicio del procesamiento de la solicitud de A Hub.Context.ConnectionId == A, pero al final del método, llame a Hub.Context.ConnectionId == B.

¿Debo estar copiando el Hub.Context? ¿En qué punto debo hacer esto?

Respuesta

7

No es necesario que sea seguro para subprocesos, ya que las instancias de Hub no son estáticas, por lo que no es necesario copiar nada.

Se crean por llamada. De modo que cada llamada del cliente creará una nueva instancia de Hub y HubContext.

+0

Veo gracias, estaba devolviendo el mismo concentrador desde el IHubActivator, ahora lo he cambiado para devolver un nuevo concentrador cada vez. –

0

Esto no responde directamente a su pregunta, pero mi flujo de trabajo habitual es establecer un valor para la persona que llama cuando se conecta por primera vez, lo que puede lograr lo que necesita.

Caller.clientId = Guid.NewGuid();