运行 Azure SignalR 的用户超过 1 个时,我的聊天网站出现问题。例如
用户 A 登录系统并可以正常发送/接收消息,用户 B 也登录并收到 JavaScript 错误。如果用户 A 关闭浏览器窗口,则用户 B 可以正常发送/接收消息,反之亦然。
这是我正在使用的技术:
- ASP.NET Core MVC(.NET 框架运行时)
- Microsoft.Azure.SignalR v1.0.3(免费层)
- Microsoft.AspNetCore.SignalR
- JS 客户端 - https://cdn.jsdelivr.net/npm/@@aspnet/signalr@1.0.3/dist/browser/signalr.min.js
该错误似乎来自 SignalR Javascript 客户端。
这是我收到的 Google Chrome 控制台错误消息:
我的 JS 代码如下所示:
function setChatConnection() {
var chatConnection = new signalR.HubConnectionBuilder()
.withUrl('/chat')
.configureLogging(signalR.LogLevel.Information)
.build();
bindConnectionMessage(chatConnection);
chatConnection.start()
.then(function () {
chatConnection.send('joingroup');
})
.catch(function (error) {
console.error(error.message);
});
}
我做了一些调试,它似乎在错误发生之前进入了 chatConnection.send('joingroup') 方法,虽然我认为这是一个红鲱鱼,但我在集线器的 OnConnectedAsync 方法中添加了一些调试并可以确认它也不叫。
我的集线器没有什么花哨的东西,我添加了一些日志记录,看起来当第二个用户尝试使用聊天时集线器可能没有被调用
public override Task OnConnectedAsync()
{
return base.OnConnectedAsync();
}
public async void JoinGroup()
{
await Groups.AddToGroupAsync(Context.ConnectionId, "Test");
}
有谁知道为什么会这样?我也尝试升级到付费 Azure SignalR 层,但仍然遇到同样的问题。