Connect / OnDisconnected方法在同一浏览器窗口SignalR中的ConnectionId不同

时间:2016-12-19 21:45:12

标签: asp.net signalr signalr-hub

我正在为我的网络应用程序开发聊天客户端,我遇到了从Hub Context收到的不同ConnectionIds的有趣问题,当我登录我的应用程序时,我从Hub上下文获取ConnectionId并将其存储到我的列表中,当我在浏览器中关闭选项卡时,我的OnDisconnected方法已达到,但即使所有事件都发生在同一浏览器选项卡中,也会使用不同的connectionId。

        static List<ApplicationUser> onlineUsers = new List<ApplicationUser>();

    #region Connect
    public void Connect(string userName)
    {
        var id = Context.ConnectionId;

        var userDetails = new ApplicationUser
        {
            ConnectionId = id,
            UserName = userName,
        };

        if (onlineUsers.Count(x => x.ConnectionId == id) == 0)
        {
            onlineUsers.Add(new ApplicationUser { ConnectionId = Context.ConnectionId, UserName = userName });
            Clients.Others.newOnlineUser(userDetails);
            Clients.Caller.getOnlineUsers(onlineUsers);

        }
    }
    #endregion

    #region Disconnect
    public override Task OnDisconnected(bool stopCalled)
    {
        var item = onlineUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
        if (item != null)
        {
            onlineUsers.Remove(item);
            Clients.Others.newOfflineUser(item);
        }
        return base.OnDisconnected(true);
    }

知道可能导致这个问题的原因吗?

0 个答案:

没有答案
相关问题