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

时间:2014-08-19 08:05:41

标签: asp.net asp.net-mvc signalr owin signalr-hub

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

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

1 个答案:

答案 0 :(得分:2)

无法配置自定义connectionId&#39。但是,可以通过userId解决客户端问题,甚至提供您自己的IUserIdProvider。只需使用Clients.User(userId).myMethod()代替Clients.Client(connectionId).myMethod()

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