SignalR:如何将数据发送到IConnected.Connect()

Vid*_*get 20 signalr

Connect()IConnected接口上实现该方法以向正确的组添加新连接.除了一件事之外,这很有效:为了将用户添加到正确的组,我需要发送一个值以在此方法中读取.我尝试将属性添加到客户端集线器:

var uIHub = $.connection.uIHub;
uIHub.SessionType = "Edit";
Run Code Online (Sandbox Code Playgroud)

但是这个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);
Run Code Online (Sandbox Code Playgroud)

Caller.SessionType 永远是空的.

关于如何解决这个问题的任何建议?

Ale*_*ger 39

我通过将我的信息添加到查询字符串来解决这个问题,该查询字符串可用于该IConnected.Connect()方法.

在.NET客户端上,您将查询字符串传递给HubConnection:

var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");
Run Code Online (Sandbox Code Playgroud)

在JS客户端上,qs在开始连接之前设置属性:

$.connection.hub.qs = "myInfo=12345";
Run Code Online (Sandbox Code Playgroud)

然后,您可以在Connect()方法中访问服务器上的此信息:

var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);
Run Code Online (Sandbox Code Playgroud)

  • Reconnect 是否也从 QueryString 接收数据? (2认同)