【问题标题】:SignalR pending start connectionSignalR 挂起开始连接
【发布时间】:2023-08-17 23:26:02
【问题描述】:

我正在实现 SignalR 库,以便在 ASP.NET MVC 应用程序中的一种“队列”中使用 websocket。

当只有两个用户时,一切都按预期工作。当第三个人登录(我的意思是,我打开一个新标签页)时,他的 SignalR 启动请求处于等待状态,其他用户无法再使用应用程序。

所有浏览器都会发生这种情况:如果我打开 3 个 Chrome 选项卡,或 3 个 Firefox,或 2 个 Chrome 或 1 个 Firefox,或 2 个 Firefox 和 1 个 Chrome。它会永远挂起。

我的代码与为 SignalR 教程提供的代码相同:“SignalR 2 和 MVC 5 入门”。

谁能解决这个问题?我开始认为这是 IIS 限制,但我不是 100% 确定。我正在使用最后一个 SignalR 版本(2.3.0),4.6.1 ASP 版本(我已经在 IIS 配置中启用了 WebSockets)。

我发现了一个类似的问题 (SignalR start pending),但似乎没有给出答案。

JavaScript(客户端)代码:

 var attendHub = $.connection.attendHub;

    // Create a function that the hub can call back
    attendHub.client.reloadGrid = function (sr) {
        // Business logic
        }
    };

    $.connection.hub.start();

服务器集线器 (C#) 代码:

public class AttendHub : Hub
{
    private static readonly IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<AttendHub>();

    public static void RefreshAttendList(int branchId)
    {
        // Business logic
        ///...
        hubContext.Clients.All.ReloadGrid(sr);
    }
}

我正在从控制器调用 RefreshAttendList 方法,执行这一行:

AttendHub.RefreshAttendList(AppInfo.ActiveUser.BranchId);

我做错了什么?

【问题讨论】:

    标签: javascript c# asp.net-mvc websocket signalr


    【解决方案1】:

    好吧,我发现这是一个本地 IIS 限制,因为我将配置更改为使用 IIS Express 而不是本地,它的工作就像一个魅力!

    希望这对遇到同样问题的人有所帮助!

    【讨论】: