2

嗨,我正在尝试设置 signalR 来向网络用户分发消息,问题是一个站点拥有不同的“区域”和“用户类型”。

当用户通过传递 url 参数访问站点时决定区域,然后将其存储在会话变量中,“用户类型”默认情况下未登录,然后在用户登录时更改用户类型(从返回网络服务)并存储在用户对象中。

我的目标是在用户访问站点时使用 signalR 连接到集线器,并将用户 connectionId 添加到组名,使用会话中的“区域 id”和上下文中用户对象的“用户类型 id”。

我遇到的问题是我可以获得用户 ID,但是当涉及到区域 ID 时,signalR 无法访问会话。我理解不允许在 signalR 中使用会话的原因,但是否有人知道是否有一种方法可以启用此功能或另一种方法可以访问用户区域,以便我可以创建这些独特的组。

4

1 回答 1

1

如果您确实知道用户区域,则可以在连接后从客户端调用一个函数,将它们添加到该组:

在您的页面加载中:

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);
});
于 2012-11-22T10:58:18.073 回答