SignalRv2 - 将值传递给集线器

SignalRv2 - Passing values to Hub

我会尽力解释这一点。在我的 Hub 代码中,我实例化了 ConnectionMapping class。它取自这里 http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#inmemory .

ConnectionMapping 需要其字典的唯一键。我有一个名为 default.aspx.cs 的网络表单代码隐藏。在后面的代码中,我将在 Page_Load 事件中获得一个唯一的登录用户名。我如何将此用户名传递给集线器以将其添加到 ConnectionMapping?

我试过了。

IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();

但我不知道这样做之后我在做什么。帮助。

简短的回答是,你没有。不是你的代码。问题是这个序列:

  • 客户请求页面
  • 服务器端代码运行(Page_Load
  • 结果HTML/JS发送给客户端
  • 客户端连接到 SignalR

此时,您可能会添加到 ConnectionMapping。当然,问题是 Page_Load 中的任何 data/variables 不再可用,即使它们是,您也无法将刚刚收到的连接映射到该页面请求。

您的网站需要保留一些信息,可能是用户名,并在连接时将其传递给集线器(可能通过查询字符串)。数据甚至可以作为 Page_Load 事件的一部分存储在页面中(在隐藏的 div 中或通过其他机制)。

现在你同时拥有两条信息,可以正常添加到映射中了。