我希望能够让各个用户使用SignalR互相发送消息,因此我需要发送到特定的客户端ID。我如何在会话开始时为特定用户定义客户端ID - 说出用户的GUID主键?SignalR - 手动设置ClientID
回答
用您自己的https://github.com/SignalR/SignalR/wiki/Extensibility替换IConnectionIdFactory。
使用范例: http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
编辑:这不再SignalR的最新版本支持。但是,你可以定义一个用户ID使用新IUserIdProvider的特定连接
的SignalR Client Side documentation概述如下:
connection.id - 获取或设置客户端ID为当前连接
这当然表明应该能够设置clientID客户端,没有所有上述管道。这不工作?如果工作,这行代码将如何?
我还没有尝试过,但我需要能够将连接ID分配给服务器已知的某些内容,例如GUID(用户ID),因此IConnectionFactory解决方案对我来说最适合。 – reach4thelasers 2012-04-24 13:38:29
+1虽然提高它 – reach4thelasers 2012-04-24 13:38:48
在使用集线器方法的SignalR版本1中,我重写了Hub OnConnected()方法,并将.NET成员资格userId与当前连接标识(Context.ConnectionId)关联保存在SQL数据库中。
然后我重写Hub OnDisconnected()方法并删除.NET成员资格userId和当前连接ID之间的关联。这意味着在页面上重新加载userId/connectionId关联将是最新的。
东西线沿线的:
public class MyHub : Hub
{
private MembershipUser _user
{
get { return Membership.GetUser(); }
}
private Guid _userId
{
get { return (Guid) _user.ProviderUserKey; }
}
private Guid _connectionId
{
get { return Guid.Parse(Context.ConnectionId); }
}
public override Task OnConnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Create(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnConnected();
}
public override Task OnDisconnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Delete(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnDisconnected();
}
}
然后,当我需要触发特定用户SignalR事件,我可以从数据库协会(S)与当前的用户id制定出的ConnectionId - 有如果涉及多个浏览器实例,则可能会多于一个关联。
你有这样的例子吗? – CR41G14 2013-03-11 09:31:41
我已经用示例更新了我的答案 – 2013-03-11 11:59:59
- 1. 手动安装谷歌登录iso sdk终止应用程序设置clientID
- 2. Phonegap/SignalR - 设置document.cookie
- 3. 手动设置AlternateItemTemplate
- 4. 手动设置models.DateTimeField
- 5. 手动设置UUID
- 6. 手动设置ID
- 7. 手动设置livewallpaper
- 8. 手动设置IIdentity
- 9. 手动设置event.target
- 10. 手动设置Airplay?
- 11. 手动设置r_creation_date?
- 12. 手动设置DJANGO_SETTINGS_VARIABLE
- 13. 在C中设置ClientID为静态#
- 14. 手动设置gtk的限制。设置
- 15. 我可以设置动态生成控件的期望ClientID
- 16. 将动态clientID设置为使用javascript回收值
- 17. BlazeDS手动设置Cookie
- 18. Android Camera2手动设置
- 19. 如何手动设置NSManagedObjectID?
- 20. Javascript手动设置URL
- 21. 动态设置手把类
- 22. 手动设置ID,学说
- 23. 手动设置测试头
- 24. 手动设置ID 2
- 25. JPA GenerationType.AUTO和设置手动
- 26. 如何手动设置UITableViewCell?
- 27. 手动设置UINavigationController儿童
- 28. 手动设置UI语言?
- 29. 手动设置指针值
- 30. 如何设置titleForHeaderInSection手动
非常好 - 感谢您的回复和博客链接! – reach4thelasers 2012-03-08 09:39:31
有没有办法在不使用cookies的情况下手动设置客户端ID?也许是start()方法的一个参数,或者是将信息传递给自定义连接工厂中的请求对象的另一种方法? – 2012-03-08 15:48:25
感谢您链接到我的博客! – 1kevgriff 2012-03-08 16:30:19