SignalR从控制器加入组

Jon*_*lis 1 c# asp.net-mvc signalr signalr-hub

当用户登录我的网站时,他们会从下拉列表中选择他们所属的组.在登录回发时,当他们登录时,我想将它们分配给正确的SignalR组.

根据此处的文档,我可以通过以下方式加入客户端:

contosoChatHubProxy.server.joinGroup(groupName);
Run Code Online (Sandbox Code Playgroud)

有没有办法从控制器分配组?我可以称之为Hub:

var hub = new NotificationHub()
hub.JoinGroup(selectedGroup);
Run Code Online (Sandbox Code Playgroud)

但hub方法中的Context为null.这可能,或者我是否错误地接近了这个问题?谢谢你的任何建议.

Lar*_*ner 8

你不应该像这样建立一个中心; 您可以从外部代码获取集线器上下文并将用户添加到组中,如下所示:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
hubContext.Groups.Add(connectionId, groupName);
Run Code Online (Sandbox Code Playgroud)

  • 您必须从客户端将其传递给控制器​​.在javascript中是$ .connection.hub.id (4认同)
  • @GoldnArms连接ID和请求之间的自动关联仅在通过SignalR连接时存在(然后您可以通过Caller.ConnectionId获取); 因此,例如,如果您向Web API端点发出常规HTTP请求,除非您明确传递该信息,否则无法知道调用者是哪个SignalR客户端 (4认同)