SignalR关闭WebSocket时出错-无效的句柄。

6

出现了这个SignalR问题:

关闭WebSocket时发生错误: System.Net.WebSockets.WebSocketException (0x80070006): 句柄无效

我认为这个问题与以下代码有关:

var currentHub = GlobalHost.ConnectionManager.GetHubContext<HubManager>();
currentHub.Groups.Remove(userConnectionId, roomName);

如何解决这个问题?

我在我的“单元”测试中偶尔会看到这些问题(当我没有干净地关闭连接时)。 - Frank Shearar
1个回答

1

我遇到了同样的问题,这个问题出现在我给SignalR添加SQL Backplane之后。

这与hub上下文的“新鲜度”有关,我的解决方法如下:

    /// <summary>
    /// In case a backplane  is used (in case of load balancer) , the instance should always be taken fresh
    /// if no backplane is used no need to refresh the instance on each invocation
    public class HubContextService 
    {
        bool BackplaneUsed { get; set; }
        IHubContext _context = null;

        public  HubContextService(bool isBackPlaneUsed = true)
        {
            BackplaneUsed = isBackPlaneUsed;
        }

        public IHubContext HubContext
        { 
            get
            {
                if (BackplaneUsed)
                {
                    return GlobalHost.ConnectionManager.GetHubContext<HubManager>();
                }
                else
                {
                    if (_context == null)
                    {
                        _context = GlobalHost.ConnectionManager.GetHubContext<HubManager>(); 
                    }
                    return _context;
                }
            }
            set 
            {
                _context = value;
            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接