我对SignalR持久连接有一个奇怪的问题。它在c#上编写的单一服务中运行,并使用长轮询传输。该应用程序在KVM内部的Ubuntu VM上运行。应用程序和HTML / js客户端之间的通信大多是正常的,但在某些时候由于某种原因,每个新创建的连接的行为方式如下:建立连接并调用OnConnected方法,但是,当客户端发出“poll”请求时,它超时了。在100%的情况下,当应用程序进入此状态时,重新启动它无济于事:来自客户端的“轮询”请求仍然会超时。唯一有用的就是重启整个VM。有谁曾经经历过这样的事情? SignalR是否将任何连接数据保存到文件系统,这可能是为什么在重新启动应用程序后,它仍会超出长轮询请求的时间?
答案 0 :(得分:0)
愚蠢的我!问题与在SignalR连接授权期间发生的数据库访问有关。数据库访问层的设计很差,数据库会不时被锁定。然后,验证过程将等待DB锁定被释放并最终 - 超时。作为阅读这个轶事的每个人的建议:在PersistentConnection案例中,确保AuthorizeRequest方法中没有发生重量级的东西!或者,如果你无法避免这种情况,那么它应该经过精心设计,否则你会要求超时。