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 中或通过其他机制)。
现在你同时拥有两条信息,可以正常添加到映射中了。
我会尽力解释这一点。在我的 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 中或通过其他机制)。
现在你同时拥有两条信息,可以正常添加到映射中了。