我们有一个扩展(2个实例)Azure Cloud部署的基于asp.net Web API的SignalR中心服务器,它充当设备与其移动用户之间的接口。几乎是一个聊天场景。
虽然连接处于活动状态,但我们看到多个OnDisconnected 调用某些连接。基本上虽然服务器看到多个OnDisconnected调用为自己触发连接,但客户端仍然可以进行调用,并且它继续使用与相同信号器连接ID相同的单个连接。
它好像客户端对服务器上调用的OnDisconnected没有影响。 客户使用 websockets 。
我们在 OnDisconnected (基本上跟踪连接)中执行了一些操作,因为这样做会导致失败。我们的代码封装在try / catch块中,让 base.OnDisconnected 无关地运行。 看一下信号器代码,但无法弄清楚这是怎么回事。
任何帮助将不胜感激。 我们正在使用: Signalr 2.2.2。
答案 0 :(得分:1)
您是否使用某种形式的背板来管理您的州?如果是这样,它看起来您的连接ID没有在请求之间同步。即使连接缓慢且无响应但未断开连接,onDisconnect也会触发,这取决于您使用的超时值。还有一些情况下,如果没有onDisconnect被解雇,你将断开连接,onDisconnected在大多数情况下都是最好的情况。如果您需要根据断开连接做一些工作,那么最好使用轮询策略来确定用户是否仍然连接。