2012-09-18 17 views
19

Implementuję metodę Connect() na interfejsie IConnected, aby dodać nowe połączenia do właściwych grup. Działa to dobrze, z wyjątkiem jednej rzeczy: aby dodać użytkownika do właściwej grupy, należy wysłać wartość do odczytania w tej metodzie. Próbowałem dodać obiekt do koncentratora klienta:SignalR: Jak wysłać dane do IConnected.Connect()

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

Ale to nie jest dostępne od sposobu 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 zawsze ma wartość null.

Wszelkie sugestie, jak rozwiązać ten problem?

Odpowiedz

36

Rozwiązałem to, dodając moje informacje do kwerendy, która jest dostępna w metodzie IConnected.Connect().

Na kliencie .NET możesz przekazać ciągu kwerendy do swojej HubConnection:

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

Na kliencie JS, ustawić właściwość qs przed rozpoczęciem połączenia:

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

Następnie można dostęp ta informacja na serwerze w metodzie Connect():

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

Czy wiesz, jak zrobić to samo z klientem javascript? Próbowałem następujące, ale to nie działa: var connection = $ .connection ("http: // localhost: 61806 /", "sessionType = wizyta"); var uIHub = connection.uIHub; –

+1

To powinno działać: '$ .connection.hub.qs =" myInfo = 12345 "; $ .connection.hub.start(); ' –

+0

@akoeplinger jest bezpieczne przekazywanie parametrów userid i username w ten sposób? Może powodować problemy z bezpieczeństwem? – Freshblood

Powiązane problemy