2012-09-18 51 views
19

我實現了Connect()方法,在IConnected接口上將新連接添加到正確的組。除了一件事之外,這種方法運行良好:爲了將用戶添加到正確的組中,我需要發送一個值以便在此方法中讀取。我嘗試添加屬性到客戶中心:SignalR:如何將數據發送到IConnected.Connect()

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

但它不是從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總是空。

關於如何解決這個問題的任何建議?

回答

36

我解決了這個問題,將我的信息添加到查詢字符串中,該查詢字符串在IConnected.Connect()方法中可用。

您傳遞查詢字符串到.NET客戶端您HubConnection

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

然後,您可以訪問:

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

在JS客戶端,開始連接之前設置qs屬性此信息在服務器上的Connect()方法:

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

你知道如何做與JavaScript客戶端一樣嗎?我嘗試了以下,但它不工作: var connection = $ .connection(「http:// localhost:61806 /」,「sessionType = visit」); var uIHub = connection.uIHub; –

+1

這應該工作:'$ .connection.hub.qs =「myInfo = 12345」; $ .connection.hub.start();' –

+0

@akoeplinger以這種方式傳遞userid和username參數是安全的嗎?會導致任何安全問題? – Freshblood