我最近在ASP.NET MVC3应用程序中从0.4.0更新到SignalR 0.5.2。在SignalR 0.5.2中,当用户断开连接时,Context实例上的“User”属性为null
- 这是设计的吗?
从下面的“立即窗口”快照中可以看出,当客户端断开连接时我所知道的Context
是断开连接的客户端的ConnectionId。
Context
{SignalR.Hubs.HubCallerContext}
ConnectionId: "... some connection id ..."
Headers: null
QueryString: null
RequestCookies: null
ServerVariables: null
User: null
简化,我的SignalR Hub
实现如下:
public class MyHub : Hub, IDisconnect, IConnected
{
// some other code
public Task Disconnect()
{
var user = Context.User; // <-- This is null
// more code
}
}
总结一下 - 我忘了这里的东西,还是设计Context.User是null
?如果是这样 - 为什么? :)
答案 0 :(得分:5)
我在SignalR维基中找到了答案。在其关于集线器(https://github.com/SignalR/SignalR/wiki/Hubs)的部分中,它指出:
每当客户端断开连接时,将在所有实现IDisconnect的集线器上调用Disconnect方法。调用此方法时,可以使用Context.ConnectionId访问断开连接的客户端。 注意:此方法是从服务器调用的,这意味着调用者对象上的状态,连接的任何状态,以及HubContext的用户和Cookie都不会被填充。