我最近了解了SignalR并实现了持久联机连接检查,其中状态存储库是SQL数据库。
它可以正确检测用户何时在线/离线。问题变为当用户在线浏览Home/Index.cshtml
然后转到Home/Edit.cshtml
时,OnDisconnected
被解雇,因此它会创建新连接。如果我想保持连接打开怎么样?我已将集线器连接放在_Layout.cshtml
中,但显然会在浏览新页面时重新加载。
我试图增加:
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(45);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(15);
Startup.cs
之前的app.MapSignalR();
。没有用,不知道为什么。
因此,如果我想保持聊天api,用户将暂时离线/在线。我想阻止这一点。
答案 0 :(得分:0)
只需实施OnReconnected()
方法,并让您的用户保持在线状态。
public override Task OnReconnected()
{
string name = Context.User.Identity.Name;
if (!_connections.GetConnections(name).Contains(Context.ConnectionId))
{
_connections.Add(name, Context.ConnectionId);
}
return base.OnReconnected();
}
完整示例here。
答案 1 :(得分:0)
在这种情况下 - 创建母版页(mvc情况下的布局页面),在母版页中,将用户连接到信号服务器。因此,如果用户将重定向到其他页面,它将与信号服务器连接。