2012-07-17 136 views
3

我最近在ASP.NET MVC3应用程序中从0.4.0更新为SignalR 0.5.2。在SignalR 0.5.2中,当用户断开连接时,Context实例上的“用户”属性为null - 这是否由设计决定?SignalR 0.5.2 - Context.User在断开连接时为空

从下面的“即时窗口”快照可以看出,当客户端断开连接时,我所知道的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?如果是这样 - 为什么? :)

回答

5

我在SignalR wiki中找到了答案。在其关于集线器的部分(https://github.com/SignalR/SignalR/wiki/Hubs)中指出:

每当客户端断开连接时,将在所有实现IDisconnect的集线器上调用Disconnect方法。当调用此方法时,可以使用Context.ConnectionId访问断开连接的客户端。 注意:从服务器调用此方法,这意味着调用方对象的状态,连接的任何状态以及HubContext的用户和Cookie将不会被填充。