SignalR 挂起开始连接

Posted

技术标签:

【中文标题】SignalR 挂起开始连接【英文标题】:SignalR pending start connection 【发布时间】:2019-03-02 15:15:25 【问题描述】:

我正在实现 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);

我做错了什么?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于SignalR 挂起开始连接的主要内容,如果未能解决你的问题,请参考以下文章

如何终止 SignalR 连接?

C# SignalR 异常 - 在收到调用结果之前连接开始重新连接

C#SignalR异常 - 在收到调用结果之前,连接开始重新连接

SignalR Client 开始连接时如何设置用户?

关于SignalR连接数量问题的记录

《ASP.NET SignalR系列》第二课 SignalR的使用说明