我正在为我的网络应用程序开发聊天客户端,我遇到了从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);
}
知道可能导致这个问题的原因吗?