首页 > 解决方案 > 为什么多次收到此 SignalR 消息?

问题描述

我在 Blazor 服务器端应用程序中使用 SignalR。我将Microsoft.AspNetCore.SignalR.ClientNuget 包 (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 次。此外,他使用的代码与我完全相同(从源代码管理中签出),因此如果这是问题所在,我们应该得到相同的结果。

有人知道为什么会发生这种情况吗?谢谢

标签: signalrblazorasp.net-core-signalr

解决方案


当您HubConnection在组件内初始化 a 并且未配置IDisposeIAsyncDispose在您的组件上配置 HubConnection 时,可能会发生这种情况。


推荐阅读