我使用带有非常基本的集线器的网络核心 3.1 应用程序。一切都在本地按预期工作。但是在服务器上,执行第一次调用后,websocket 连接将关闭。
我确信在服务器上启用了 websockets。使用 Blazor Server 的另一部分工作正常。而且只要没有调用集线器方法,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");
}
}
}
索引.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>
答案 0 :(得分:0)
引用 nuget Mongo2Go 导致了问题。在 3.1.3 版本中,他们添加了 System.Text.Json 5.0.1,这会破坏信号器。
将 Mongo2Go 降级到 3.1.1 版使信号器再次工作。