SignalR持久连接开始超时来自客户端的“轮询”请求,重启后不能恢复

SignalR持久连接开始超时来自客户端的“轮询”请求,重启后不能恢复

问题描述:

我有一个SignalR持久连接的奇怪问题。它运行在用C#编写的单一服务中,并使用长轮询传输。该应用程序在KVM内部的Ubuntu VM上运行。应用程序和HTML/js客户端之间的通信大多正常,但由于某种原因,某些原因,每个新创建的连接的行为如下:连接建立并调用OnConnected方法,但是,当客户端发出“轮询”请求时,它超时。在应用程序进入此状态的100%情况下,重新启动它无助于:“轮询”来自客户端的请求仍然会超时。唯一有帮助的是重启整个虚拟机。有没有人经历过类似的事情? SignalR是否将任何连接数据保存到文件系统,这可能是重新启动应用程序后仍然超时长轮询请求的原因?SignalR持久连接开始超时来自客户端的“轮询”请求,重启后不能恢复

笨我!问题与SignalR连接授权期间发生的数据库访问有关。数据库访问层设计不佳,数据库不时会被锁定。然后认证程序将等待数据库锁释放,并最终超时。作为一个阅读这个轶事的建议:在PersistentConnection的情况下,请确保在AuthorizeRequest方法内没有发生IO重的东西!或者如果你无法避免这种情况,应该非常仔细地设计,否则你会要求超时。