我在控制台应用程序和WPF客户端中有一个signalR中心。 启动时,signalR 连接初始化,并应始终保持活动状态。 每秒都有一条消息从服务器推送到具有当前SystemTime的客户端(这是您可以在日志中看到的"SystemTimeUpdateNotification")
我现在描述的行为是在 Windows7 设备上:每隔一段时间,我就会看到客户端失去与服务器的连接。 由于某种原因,客户端检测到它处于非活动状态并停止连接。我不知道"自 2017 年 4 月 20 日凌晨 3:04:06 以来处于非活动状态"和"超时 00:00:50"来自哪里。 如果我同时检查服务器上的日志,我可以看到没有激活消息。
2017-04-20 05:04:04.0728,跟踪,收到通知 系统时间更新通知 2017-04-20 05:04:05.0859,跟踪,收到通知 系统时间更新通知 2017-04-20 05:04:06.0999,跟踪,收到通知 系统时间更新通知 2017-04-20 05:05:13.1020,跟踪,收到通知 系统时间更新通知 2017-04-20 05:05:14.1160,跟踪,接收通知 系统时间更新通知 2017-04-20 05:05:14.5511,信息,客户端自 2017 年 4 月 20 日 3:04:06 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 2017-04-20 05:05:14.5871,信息,SignalR 连接状态从"已连接"更改为"已断开连接" 2017-04-20 05:05:14.5871,跟踪,收到的通知通知连接状态已更改 2017-04-20 05:05:14.5981,信息,断开连接... 2017-04-20 05:05:14.5981,信息,取消正在进行的操作 2017-04-20 05:05:19.6104,信息,SignalR 连接状态从"断开连接"更改为"正在连接" 2017-04-20 05:05:19.6104,跟踪,收到的通知通知连接状态已更改 2017-04-20 05:05:19.6104,信息,断开连接... 2017-04-20 05:05:19.6454,信息,SignalR 连接状态从"正在连接"更改为"已连接" 2017-04-20 05:05:19.6454,跟踪,收到的通知通知连接状态已更改 2017-04-20 05:05:19.6454,信息,连接... 2017-04-20 05:05:19.6524,调试,执行客户端/服务器兼容性检查 2017-04-20 05:05:19.6524,调试,软件兼容 2017-04-20 05:05:19.6524,信息,开始检索初始数据 2017-04-20 05:05:20.0344,信息,初始数据检索 2017-04-20 05:05:20.2044,跟踪,已收到通知 系统时间更新通知 2017-04-20 05:05:21.2144,跟踪,收到通知 系统时间更新通知
服务器端的日志:
2017-04-20 05:03:31.6069;跟踪;保持活动状态(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:03:41.6225;跟踪;保持活动状态(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:03:51.6371;跟踪;保持活动状态(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:04:01.6527;跟踪;保持活动状态(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5661;信息;中止(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5661;信息;正在删除连接 6a12952a-1cb4-4933-b6b1-db16158958a9 2017-04-20 05:05:14.5661;信息;结束(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5841;跟踪;排水写入(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5841;信息;完成请求 (6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:19.6344;信息;连接 9249a8a5-8653-450c-b8da-c5b7a4c7df81 是新的。 2017-04-20 05:05:27.6738;跟踪;保持活动状态(9249a8a5-8653-450c-b8da-c5b7a4c7df81) 2017-04-20 05:05:37.6874;跟踪;KeepAlive(9249a8a5-8653-450c-b8da-c5b7a4c7df81)
现在我到了非常奇怪的部分。"偶尔"实际上是相当固定的。我查找了最近几天的日志条目,它似乎总是每 11 小时出现一次
与上一个日志条目的非活动时间戳差异 2017/04-17 17:59:44 0:00:00 客户端自 2017/4/17 15:58:35 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 2017-04-17 17:59:44 11:01:06 客户端自 2017/4/17 15:58:35 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 2017-04-17 06:58:38 10:01:01 客户端自 2017/4/17 4:57:34 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 16/04/2017 20:57:37 11:01:06 客户端自 2017/4/16 18:56:29 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 16/04/2017 09:56:31 11:01:06 客户端自 2017/4/16 7:55:23 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。15/04/2017 22:55:25 11:01:06 客户端自 2017/4/15 20:54:17 PM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 15/04/2017 11:54:19 0:00:00 客户端自 2017 年 4 月 15 日 9:53:09 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 15/04/2017 11:54:19 11:01:07 客户端自 2017 年 4 月 15 日 9:53:09 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 15/04/2017 00:53:12 11:01:06 客户端自 2017/4/14 22:52:03 PM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 14/04/2017 13:52:06 11:01:06 客户端自 2017/4/14 11:50:58 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。 2017/4/14 02:51:00 客户端自 2017/4/14 12:49:52 AM 以来一直处于非活动状态,并且已超过 00:00:50 的非活动超时。停止连接。
是否存在最长连接时间之类的东西或可能导致此行为的原因?
编辑 1: 如果我在Windows 8上运行相同的代码,我没有这个问题。 我想这与Windows 7上使用的传输方法有关(不支持websockets)
编辑2:
服务器客户端不活动问题 赢 8 赢 8 否 赢 7 赢 7 是 赢 7 赢 8 否 赢 8 赢 7 是
所以它似乎与客户端的操作系统有关。
如文档中所述,保持连接的一种方法是在断开连接后不断重新连接。在客户端中设置断开连接的功能
$.connection.hub.disconnected(function() {
setTimeout(function() {
$.connection.hub.start();
}, 5000); // Restart connection after 5 seconds.
});