2012-07-16 17 views
10

Estoy empezando a probar SignalR para la aplicación de supervisión. Tengo un control que realiza una llamada al Hub por parte del cliente. Noté que, cada vez que el cliente crea Connection.Hub.Start(), crea una nueva instancia de Hub en el servidor, necesito actualizar mi control todo el tiempo, por lo que no quiero que cree un Hub nuevo para cada uno.Creación del mismo SignalR Hub para todos los clientes

¿Hay alguna manera de crear Hub individual para todos los clientes o me falta algo?

Respuesta

18

Se crea una instancia de Hub para cada solicitud, al igual que se crea una instancia de página ASP.NET para cada solicitud en WebForms, se crea un controlador para cada solicitud en ASP.NET MVC o se crea una instancia de servicio WCF para cada solicitud de servicio cuando se usa InstanceMode.PerCall.

Si desea mantener el estado compartido entre las solicitudes/instancias de Hub, necesitará usar un campo estático o alguna otra forma más avanzada de compartir estado (por ejemplo, singleton inyectado por dependencia).

+0

Gracias, esto está claro. En cada llamada, el servidor hace el trabajo de la solicitud y finaliza. pero aquí tengo una situación que tiene que mantener la conexión de los clientes para enviarles datos. De lo contrario, cómo SinalR mantendrá todos los clientes conectados, si cada llamada tiene un nuevo concentrador. – Wasim

+0

Un concentrador es una capa de abstracción que se encuentra por encima de los aspectos de conectividad de nivel inferior de SignalR y le presenta las solicitudes en ese modelo de ejecución de instancia por solicitud más simple. Si quieres trabajar en una capa inferior, entonces trabaja directamente en la clase PersistentConnection. Los hubs y sus métodos se invocan realmente a través de HubDispatcher, que es una subclase PersistentConnection. Es una capa mucho más difícil de trabajar y es por eso que la abstracción Hubs existe en primer lugar. –

Cuestiones relacionadas