Asp.net core 如何检测信号机连接是否被故意关闭?
我正在尝试检测信号器连接是否因为网络问题或故意丢失。我看到了很多解决方案,但它们似乎是针对较旧版本的Aspnet core Signaler的。(它们使用ondisconnected和参数stopcalled)。在我的版本中,我只有ondisconnectedasync,参数Exception Exception始终为null 我正在服务器端使用Microsoft.AspNet.SignalR.Core的2.4.1版。和“@aspnet/signal”:“^1.1.4”在客户端 这是我的代码:Asp.net core 如何检测信号机连接是否被故意关闭?,asp.net-core,signalr,Asp.net Core,Signalr,我正在尝试检测信号器连接是否因为网络问题或故意丢失。我看到了很多解决方案,但它们似乎是针对较旧版本的Aspnet core Signaler的。(它们使用ondisconnected和参数stopcalled)。在我的版本中,我只有ondisconnectedasync,参数Exception Exception始终为null 我正在服务器端使用Microsoft.AspNet.SignalR.Core的2.4.1版。和“@aspnet/signal”:“^1.1.4”在客户端 这是我的代码:
public override async Task OnDisconnectedAsync(Exception exception)
{
var httpContext = Context.GetHttpContext();
//get the user that lost connection or is being disconnected.
var user = users.SingleOrDefault(u => u.ConnectionId == Context.ConnectionId);
if(user != null && /* if connection was closed deliberately*/ )
{
//remove user from the list
users.Remove(user);
//log the user out.
ParticipantController.Logout(user.UserId);
}
await base.OnDisconnectedAsync(exception);
}
有人知道如何实现此功能吗?
我还想知道刷新页面是否也被视为故意断开连接,如果是,我如何将其与实际的选项卡关闭或windows关闭断开连接区分开来。当出现连接问题时,异常是否仍然为空?是,当刷新、关闭或网络关闭时。原因是什么并不重要。它始终为空。您使用的信号版本错误。好的,但那是在客户端。这是否也会影响服务器端?怎么做@stpaulis几年前,
aspnet/signal
更改为microsoft/signal
,并且保持了与ASP核心包相同的版本。如果在旧的基础上叠加,则会错过一些重要功能,例如自动重新连接
,并且可能存在一些漏洞。也许它也能解决你的问题,但我不确定。