2012-09-18 26 views
19

Implemento el método Connect() en la interfaz IConnected para agregar nuevas conexiones a los grupos correctos. Esto funciona bien, excepto por una cosa: para agregar al usuario al grupo correcto, necesito enviar un valor para leer en este método. He intentado añadir la propiedad a la presentación del cliente:SignalR: Cómo enviar datos a IConnected.Connect()

var uIHub = $.connection.uIHub; 
uIHub.SessionType = "Edit"; 

pero no es accesible desde el método Connect:

if (string.IsNullOrEmpty(Caller.SessionType) || Caller.SessionType == "Edit") { 
    sessionId = WAFContext.EditSession.SessionId.ToString();     
} else { 
    sessionId = WAFContext.ViewSession.SessionId.ToString(); 
} 
Groups.Add(Context.ConnectionId, sessionId); 

Caller.SessionType siempre es nula.

¿Alguna sugerencia para resolver este problema?

Respuesta

36

Lo resolví agregando mi información a la querystring, que está disponible en el método IConnected.Connect().

En el cliente .NET que pase la cadena de consulta en su HubConnection:

var connection = new HubConnection("http://localhost:8080/", "myInfo=12345"); 

En el cliente de JS, se establece la propiedad qs antes de iniciar la conexión:

$.connection.hub.qs = "myInfo=12345"; 

Usted puede entonces tener acceso esta información en el servidor en el método Connect():

var myInfo = Context.QueryString["myInfo"]; 
Groups.Add(Context.ConnectionId, myInfo); 
+0

¿Sabes cómo hacer lo mismo con el cliente de JavaScript? He intentado lo siguiente, pero no funciona: var connection = $ .connection ("http: // localhost: 61806 /", "sessionType = visit"); var uIHub = connection.uIHub; –

+1

Esto debería funcionar: '$ .connection.hub.qs =" myInfo = 12345 "; $ .connection.hub.start(); ' –

+0

@akoeplinger ¿es seguro pasar los parámetros userid y username de esta manera? Puede causar algún problema de seguridad? – Freshblood

Cuestiones relacionadas