对连接到SignalR的客户端使用相同的connectionId

我对SignalR很陌生,而且我遇到了障碍:我目前在一台服务器上运行一个ASP.NET MVC应用程序(用户进入并使用他们的凭据登录应用程序)和一个在内部运行的SignalR集线器Windows服务使用OWIN和自托管托管在不同的计算机上 . 我设法让我的网络应用程序和SignalR集线器一起工作,客户端连接到集线器,并能够向/从SignalR发送/接收数据 .

但是,我希望我的Web应用程序始终使用相同的connectionId为特定用户连接到SignalR - 我更喜欢使用userId(或基于此的东西) . 由于SignalR是自托管的,因此在Hub实现中可用的Context对象中,我无法从我的MVC应用程序访问用户 . 据我所知,我无法从客户端(jQuery)设置connectionId,但如果我错了,请纠正我......所以任何有关如何实现所需行为的想法或建议都将不胜感激!

回答(1)

2 years ago

无法配置自定义connectionId . 但是,可以通过userId对客户端进行寻址,甚至可以提供自己的IUserIdProvider . 只需使用 Clients.User(userId).myMethod() 而不是 Clients.Client(connectionId).myMethod() .

如果您不提供自己的 IUserIdProvider ,则当所述客户端调用Hub方法时,给定客户端的默认userId将是 Context.User.Identity.Name 的值 .