SignalR集线器在调用方法后关闭连接



我使用了一个带有非常基本Hub的net core 3.1应用程序。当地一切如预期。但在服务器上,websocket连接在执行第一个调用后关闭。

我确信服务器上已启用websocket。使用Blazor Server的另一部分工作正常。而且只要没有调用hub方法,websocket连接就处于活动状态。

客户端还接收集线器发送的数据。

在chrome中测试,点击按钮后,提示框显示三条消息。然后连接丢失:

未捕获(承诺中(错误:由于基础连接被关闭,调用被取消。

我已经测试过从本地机器连接到带有客户端的服务器,但这不起作用。所以这不应该是客户的问题。

使用本地客户端和本地运行的应用程序,一切都很好。

TestHub.cs

using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace Test
{
public class TestHub : Hub
{
public async Task Test(string name)
{
await Clients.Caller.SendAsync("Message", $"Hello, World! ({ name }) 1");
await Clients.Caller.SendAsync("Message", $"Hello, World! ({ name }) 2");
await Clients.Caller.SendAsync("Message", $"Hello, World! ({ name }) 3");
}
}
}

Index.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js"></script>
<h1>Test</h1>
<button onclick="test()">Test</button>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/Hub/Test")
.configureLogging(signalR.LogLevel.Information)
.build();
function start() {
try {
connection.start();
console.log("SignalR Connected.");
} catch (err) {
console.log(err);
setTimeout(start, 5000);
}
};
connection.on("Message", (message) => {
alert(message);
});
function test() {
try {
connection.invoke("Test", "Foo");
} catch (err) {
alert(err);
}
}
start();
</script>

引用nugetMongo2Go导致了这些问题。在3.1.3版本中,他们添加了System.Text.Json 5.0.1,它中断了信号器。

将Mongo2Go降级到3.1.1版本使signaler重新工作。

最新更新