C# 什么可以阻止OnDisconnectedAsync被不光彩地断开连接的客户端调用?

C# 什么可以阻止OnDisconnectedAsync被不光彩地断开连接的客户端调用?,c#,disconnect,asp.net-core-signalr,C#,Disconnect,Asp.net Core Signalr,当客户端不光彩地断开连接时(如电缆拉断、崩溃或互联网断开)。从未调用服务器上的OnDisconnectedAsync。我已经等待了15分钟以上,函数中有一个断点 我正在使用Microsoft.AspNetCore.signal(1.0.2) 我的应用程序正在作为Azure应用程序服务托管 这是我的断开功能: public override async Task OnDisconnectedAsync(Exception exception) { try

当客户端不光彩地断开连接时(如电缆拉断、崩溃或互联网断开)。从未调用服务器上的OnDisconnectedAsync。我已经等待了15分钟以上,函数中有一个断点

我正在使用Microsoft.AspNetCore.signal(1.0.2)

我的应用程序正在作为Azure应用程序服务托管

这是我的断开功能:

   public override async Task OnDisconnectedAsync(Exception exception)
    {
        try
        {
            if (_accountContextIDMap.TryGetValue(Context.ConnectionId, out int accountID))
            {
                ClientRequest_UserLoggedOut(accountID);
            }

            Logger.Write($"{Context.ConnectionId} Disconnected");
            await base.OnDisconnectedAsync(exception);
        }
        catch (Exception ex)
        {
            Logger.Write($"{ex.Message}\n{ex.StackTrace}");
        }
    }
如果我把断点放在这个函数的顶部,它就永远不会被调用。当我以正常方式关闭或退出我的应用程序时,它被称为fine

根据: 它说

如果客户端应用程序或其运行的计算机崩溃 或者进入睡眠状态(例如,当用户关闭笔记本电脑时) 服务器未被告知发生了什么。至于服务器 知道,客户端的丢失可能是由于连接造成的 中断,客户端可能正在尝试重新连接。所以,, 在这些场景中,服务器等待让客户端有机会 重新连接,在断开连接之前,OnDisconnected不会执行 超时时间到期(默认情况下约30秒)

默认情况下30秒后调用
OnDisconnected
的语句对我来说似乎不是真的。如果您能帮助我找出安装中可能出现的错误,我们将不胜感激

在我的Startup.cs中

public void ConfigureServices(IServiceCollection services)
{
     ...
     services.AddSignalR();
     ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseSignalR(route => { route.MapHub<GameHub>("/gameHub", GameHubConfigureOptions); });
    ...
}

private void GameHubConfigureOptions(HttpConnectionDispatcherOptions options)
{
    options.Transports = HttpTransportType.WebSockets;
}
public void配置服务(IServiceCollection服务)
{
...
services.AddSignalR();
...
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
...
app.UseSignalR(route=>{route.MapHub(“/gameHub”,GameHubConfigureOptions);});
...
}
私有void gamehub配置选项(HttpConnectionDispatcherOptions选项)
{
options.Transports=HttpTransportType.WebSockets;
}

在ASP.NET Core 2.1中,信号服务器不监视其客户端以查看它们是否仍处于活动状态。客户端确实监控服务器,但并非相反。不过,我们在ASP.NET Core 2.2中添加了此支持(预览版3)。在2.2中,客户端ping服务器,如果服务器有一段时间没有收到客户端的消息,则应将客户端标记为已断开连接并触发此事件。

您使用的是IIS吗?否。我使用的是Azure应用程序服务。好的,确实使用IIS。我错误地假设您的意思是IIS是虚拟/物理服务器的一部分,在这里我可以访问标准的IIS接口和控件。您所指的文档是旧的信号器-这是完全不同的。虽然它可能仍然成立,但我不太确定。我在.NETCore3上,它仍然没有受到攻击