2012-09-18 17 views
19

Implementare il metodo Connect() nell'interfaccia IConnected per aggiungere nuove connessioni ai gruppi corretti. Funziona bene, tranne che per una cosa: per aggiungere l'utente al gruppo corretto, ho bisogno di inviare un valore da leggere in questo metodo. Ho provato ad aggiungere proprietà al mozzo client:SignalR: Come inviare dati a IConnected.Connect()

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

ma non è accessibile dal metodo 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 è sempre nullo.

Qualche suggerimento su come risolvere questo?

risposta

36

Ho risolto questo aggiungendo le mie informazioni al querystring, che è disponibile nel metodo IConnected.Connect().

Sul client .NET si passa il querystring nel vostro HubConnection:

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

Sul client JS, si imposta la proprietà qs prima di iniziare il collegamento:

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

È quindi possibile accedere questa informazione sul server nel metodo Connect():

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

Sai come fare lo stesso con il client javascript? Ho provato quanto segue, ma non funziona: var connection = $ .connection ("http: // localhost: 61806 /", "sessionType = visit"); var uIHub = connection.uIHub; –

+1

Questo dovrebbe funzionare: '$ .connection.hub.qs =" myInfo = 12345 "; $ .connection.hub.start(); ' –

+0

@akoeplinger è sicuro passare i parametri userid e username in questo modo? Può causare problemi di sicurezza? – Freshblood