C# 什么可以阻止OnDisconnectedAsync被不光彩地断开连接的客户端调用?
当客户端不光彩地断开连接时(如电缆拉断、崩溃或互联网断开)。从未调用服务器上的OnDisconnectedAsync。我已经等待了15分钟以上,函数中有一个断点 我正在使用Microsoft.AspNetCore.signal(1.0.2) 我的应用程序正在作为Azure应用程序服务托管 这是我的断开功能: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
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上,它仍然没有受到攻击