我在使用 signalR 时遇到了奇怪的行为。我仅在一个组件上使用它(我的 ui 上的 vue.js)。 当用户在被破坏的事件中导航到另一个页面(我有水疗应用程序)时,我试图关闭连接。我正在尝试两种选择:
JS: connection.stop();
BE: i catch disconnect message in public override Task OnDisconnectedAsync method
或
JS: connection.invoke('Resource', params);
BE: await Groups.RemoveFromGroupAsync(Context.ConnectionId, "<group name>");
连接已成功关闭,但在一段时间(约 15-20 秒)后,signalR 尝试再次连接到服务器(但该组件不存在于 elements 块中)。一段时间后连接恢复,但该组件不存在。如果我刷新我的 spa 页面(使用 F5)signalR 不会尝试连接,但如果我使用 signalR 打开组件,情况就会再次开始。
也许有人可以帮助我:
我找到了。我创建了一个空的断开处理程序并尝试捕获连接。
public override Task OnDisconnectedAsync(Exception? exception) { //breakpoint here; }
某些开发人员在应用程序上添加了另一个 SignalR 集线器(例如 UI 上的另一个组件),并且忘记在组件卸载时调用 close。
this.connection.stop()
所以,不要忘记停止 UI 和后端服务器之间的 SignalR 连接。