您好,我正在尝试设置 signalR 以向网络用户分发消息,问题是一个站点拥有不同的“区域”和“用户类型”。
当用户访问网站时通过传递一个url参数来决定区域,然后将其存储在 session 变量中,'用户类型'默认未登录然后在用户登录到那里时更改用户类型(从网络服务返回)并存储在用户对象中。
我的目标是在用户访问站点时使用 signalR 连接到集线器,并将用户 connectionId 添加到组名,使用 session 中的“区域 ID”和用户对象中的“用户类型 ID”语境。
我遇到的问题是我可以获得用户 ID,但是当涉及到区域 ID 时,signalR 无法访问 session 。我理解不允许 session 在 signalR 中可用的原因,但是有人知道是否有办法启用此功能或我可以获得对用户区域的访问权限的替代方法,以便我可以创建这些独特的组。
最佳答案
如果您知道用户区域,您可以在连接后简单地从客户端调用一个函数将他们添加到该组:
在您的页面加载中:
ClientScript.RegisterClientScriptBlock(this.GetType(), "areaKey", "var theAreaTheyBelongTo= '" + serverSideAreaTheyBelongTo + "'", true);
在您的集线器上:
public void SubscribeToArea(string area)
{
Groups.Add(Context.ConnectionId, area);
}
在您的客户端上:
$.connection.hub.start(function () {
yourHubName.subscribeToArea(theAreaTheyBelongTo);
});
关于c# - 如何使用 session 变量中的值作为 signalR 中组名的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511012/