c# - 如何使用 session 变量中的值作为 signalR 中组名的一部分

标签 c# session asp.net-mvc-4 signalr signalr-hub

您好,我正在尝试设置 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/

相关文章:

c# - 今天,在 Visual Studio 2010 中进行单元测试的首选选项是什么?

c# - 在两个不同的 Web 应用程序中共享一个 session

c# - 在 C# 中创建 session

session - 停止随机 "Parent instance is not bound to a Session"

c# - Automapper 忽略只读属性

c# - ContinueWith 与一项任务中的顺序执行

c# - 用于基于选项卡控件的应用程序的 MVVM

c# - 统一地在 2 个位置之间无限移动游戏对象

sql-server - 将 Umbraco 部署到 Azure。未包含的所有文件

c# - 如何让 URL 客户端来自反向代理?