首页 > 解决方案 > SignalR Core 中缺少 ConnectionSlow、Reconnecting 和 StateChanged 事件的解决方法?

问题描述

我正在将一个项目从 SignalR 升级到 SignalR Core,并遇到以下问题。我没有看到 .NET 客户端快速检测到它已与服务器断开连接的方法。当 Web 服务回收其应用程序池时,就会发生这种情况。.NET Core 客户端通过HubConnection.Closed事件检测到这一点需要 90 秒。

在最初的 SignalR 中,这是通过许多事件(如HubConnection.ConnectionSlowHubConnection.Reconnecting或)瞬间完成的HubConnection.StateChanged

我在最新的稳定 SignalR Core 版本 1.0.1 中没有看到任何这些事件。我尝试监视HubConnection.State属性更改,但这似乎反映了HubConnection.Closed事件,并且还需要 90 秒才能更新。

有哪些建议的解决方法可以更快地检测连接变化?我需要实现自己的保持活动消息系统吗?

标签: c#asp.net-coresignalrsignalr-hubasp.net-core-signalr

解决方案


最后问题竟然是 app_pool 回收操作需要 90 秒才能关闭旧的 app_pool。这意味着 SignalR 连接在此期间真正处于活动状态,这就是客户端无法检测到断开连接的原因。一个快速的解决方法是将以下设置从默认的 90 秒更改为较低的超时(在我的情况下为 30 秒):

[application pool] > Right Click > Advanced Settings > Shutdown Time Limit (seconds) > 30

推荐阅读