我希望能够让各个用户使用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. 手动设置UUID
- 3. 手动设置AlternateItemTemplate
- 4. 手动设置ID
- 5. 手动设置livewallpaper
- 6. 手动设置r_creation_date?
- 7. 我可以设置动态生成控件的期望ClientID
- 8. 如何手动设置UITableViewCell?
- 9. 手动设置测试头
- 10. Android Camera2手动设置
- 11. 手动设置UI语言?
- 12. 如何手动设置NSManagedObjectID?
- 13. Javascript手动设置URL
- 14. BlazeDS手动设置Cookie
- 15. Spring Security:手动设置setUserPrincipal
- 16. Picker API - 手动设置access_token
- 17. 手机上的SignalR?
- 18. 手动设置return_to与设计
- 19. 手动设置窗口位置wpf mvvm
- 20. jQuery UI Sortable手动设置位置
- 21. 将workarea_size_policy设置为手动或自动
- 22. 使用Redis设置SignalR与SignalR的差异
- 23. 如何正确设置SignalR项目
- 24. 在ASP.NET中手动设置UICulture
- 25. 手动设置html/css时间时间
- 26. 设置秋千的JInternalFrame LNF手动
- 27. 手动设置金属1D纹理
- 28. 为DataInputStream设置手动超时
- 29. 如何手动设置连接超时?
- 30. ember.js手动设置hasDirtyAttributes不保存
非常好 - 感谢您的回复和博客链接! – reach4thelasers 2012-03-08 09:39:31
有没有办法在不使用cookies的情况下手动设置客户端ID?也许是start()方法的一个参数,或者是将信息传递给自定义连接工厂中的请求对象的另一种方法? – 2012-03-08 15:48:25
感谢您链接到我的博客! – 1kevgriff 2012-03-08 16:30:19