signalr - 为什么多次收到此 SignalR 消息?
问题描述
我在 Blazor 服务器端应用程序中使用 SignalR。我将Microsoft.AspNetCore.SignalR.Client
Nuget 包 (v5.0.11) 添加到项目中,并使用以下代码创建集线器连接...
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl("url")
.Build();
await hubConnection.StartAsync();
然后我发送一条带有以下代码的消息(Debug.WriteLine
添加以确认发生了什么)...
Debug.WriteLine($"{DateTime.Now.ToLongTimeString()} SignalR msg sent");
await hubConnection.SendAsync("Send", "Hello");
处理此类消息的组件创建集线器连接并连接到On
处理程序,如下所示...
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl("url")
.Build();
hubConnection.On<string>("Receive", msg =>
Debug.WriteLine($"{DateTime.Now.ToLongTimeString()} SignalR msg received - {msg}"));
await hubConnection.StartAsync();
当消息发出时,它肯定只发送一次(我可以从输出面板确认,我只看到“发送”输出一次),但它被接收了两次。
环顾四周,一个常见的原因似乎是 jQuery 被加载了两次。但是,我已经检查了这一点,但事实并非如此。它只被加载一次。此外,团队中的其他开发人员之一尝试了它,他收到了 15 次消息!即使我们不小心包含了 jQuery 两次,我们当然也没有包含 15 次。此外,他使用的代码与我完全相同(从源代码管理中签出),因此如果这是问题所在,我们应该得到相同的结果。
有人知道为什么会发生这种情况吗?谢谢
解决方案
当您HubConnection
在组件内初始化 a 并且未配置IDispose
或IAsyncDispose
在您的组件上配置 HubConnection 时,可能会发生这种情况。
推荐阅读
- angular - 订阅中的角度分配对象
- android - 以编程方式在应用程序上显示 logcat -b 收音机
- ruby - 使用 Ruby 选择方法进行嵌套哈希
- php - xpath 匹配第一个和最后一个孩子
- javascript - JavaScript 图像被 CORS 阻止
- python - 在我的代码中遇到错误,但我无法确定原因。(getpixel() 接受 2 个位置参数,但给出了 3 个)
- javascript - 点击后删除类
- docker - 版本 3 中是否有可用的 docker-compose 服务初始化?
- python - 一行 Python 中的多个整数输入
- ruby-on-rails - 如何用rails中数据库中的值填充下拉列表选项?