3

我最近在我的 ASP.NET MVC3 应用程序中从 0.4.0 更新到 SignalR 0.5.2。在 SignalR 0.5.2 中,Context 实例上的“用户”属性是null用户断开连接时 - 这是设计使然吗?

从下面的“立即窗口”快照中可以看出,我所知道的关于Context客户端断开连接的时间是断开连接的客户端的 ConnectionId。

Context
{SignalR.Hubs.HubCallerContext}
    ConnectionId: "... some connection id ..."
    Headers: null
    QueryString: null
    RequestCookies: null
    ServerVariables: null
    User: null

简化后,我的 SignalRHub实现如下所示:

public class MyHub : Hub, IDisconnect, IConnected
{
    // some other code

    public Task Disconnect()
    {
        var user = Context.User; // <-- This is null
        // more code
    }
}

总而言之 - 我在这里忘记了什么还是 Context.User 是设计使然null?如果是这样 - 为什么?:)

4

1 回答 1

5

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

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

于 2012-07-18T16:53:17.003 回答