Asp.net 如何获得与会话超时相关的信号器连接

Asp.net 如何获得与会话超时相关的信号器连接,asp.net,signalr,Asp.net,Signalr,使用SignalR,它的设计目的是维护与web服务器的长期运行连接。但是,我有一个场景,在ASP.Net会话过期很久之后,SignalR连接保持与web服务器的开放连接。即使客户端和服务器都没有发送数据,也会发生这种情况 如何设置,以便在Asp.net会话过期后,信号器连接终止,释放服务器上的连接 这是需要的,因为web服务器在负载平衡器上运行,当服务器退出轮换时,我们需要当前连接的#来表示活动会话的数量,而不是仅仅因为用户打开了浏览器而仍在启动的信令连接。信令服务器不允许断开特定客户端连接(这

使用SignalR,它的设计目的是维护与web服务器的长期运行连接。但是,我有一个场景,在ASP.Net会话过期很久之后,SignalR连接保持与web服务器的开放连接。即使客户端和服务器都没有发送数据,也会发生这种情况

如何设置,以便在Asp.net会话过期后,信号器连接终止,释放服务器上的连接


这是需要的,因为web服务器在负载平衡器上运行,当服务器退出轮换时,我们需要当前连接的#来表示活动会话的数量,而不是仅仅因为用户打开了浏览器而仍在启动的信令连接。

信令服务器不允许断开特定客户端连接(这将非常有用)。因此,客户有责任这样做

解决方法是在客户端上添加一个事件侦听器并从中断开连接,即:

hubProxy.On<string>("YouAreUselesLetMeAlone", _ => connection.Dispose());
hubProxy.On(“YouAreUselesLetMeAlone”,_=>connection.Dispose());

显然,要实现这一点,您需要asp.net会话信号器连接的关系(ConcurrentDictionary?),这样您就可以在asp.net会话结束时在正确的客户端中调用此方法。

我考虑利用集线器授权机制来确保会话处于活动状态,但这有点麻烦——特别是因为这根本不需要身份验证。我的另一个想法是让客户机自己通过监视会话状态或在会话结束时重定向来终止连接,但同样,这更像是一种解决方法,而不是一个合适的解决方案。