我在一个控制台应用程序中使用了SignalR Hub,同时有一个WPF客户端。 连接初始化时,SignalR连接将被建立,并且应始终保持活动状态。 每秒钟服务器都会向客户端推送一条带有当前系统时间的消息(可以在日志中看到“SystemTimeUpdateNotification”)。
现在我描述的行为是在Windows7设备上的:偶尔我会发现客户端失去与服务器的连接。 由于某种原因,客户端检测到自己已经处于非活动状态并停止连接。我不知道“自4/20/2017 3:04:06 AM以来处于非活动状态”和“超时00:00:50”的信息从何而来。 如果我在同一时间检查服务器上的日志,我可以看到没有keepalive消息。
2017-04-20 05:04:04.0728,Trace,Received notification SystemTimeUpdateNotification 2017-04-20 05:04:05.0859,Trace,Received notification SystemTimeUpdateNotification 2017-04-20 05:04:06.0999,Trace,Received notification SystemTimeUpdateNotification 2017-04-20 05:05:13.1020,Trace,Received notification SystemTimeUpdateNotification 2017-04-20 05:05:14.1160,Trace,Received notification SystemTimeUpdateNotification 2017-04-20 05:05:14.5511,Info,客户端自4/20/2017 3:04:06 AM以来一直处于非活动状态,已超过非活动超时时间00:00:50。正在停止连接。 2017-04-20 05:05:14.5871,Info,SignalR连接状态从“已连接”更改为“已断开连接” 2017-04-20 05:05:14.5871,Trace,Received notification NotificationConnectionStateChanged 2017-04-20 05:05:14.5981,Info,正在断开连接... 2017-04-20 05:05:14.5981,Info,取消正在进行的操作2017年4月20日05:05:19.6104,信息,SignalR连接状态从“已断开”变为“正在连接” 2017年4月20日05:05:19.6104,跟踪,收到通知NotificationConnectionStateChanged 2017年4月20日05:05:19.6104,信息,正在断开连接... 2017年4月20日05:05:19.6454,信息,SignalR连接状态从“正在连接”变为“已连接” 2017年4月20日05:05:19.6454,跟踪,收到通知NotificationConnectionStateChanged 2017年4月20日05:05:19.6454,信息,正在连接... 2017年4月20日05:05:19.6524,调试,执行客户端/服务器兼容性检查 2017年4月20日05:05:19.6524,调试,软件兼容 2017年4月20日05:05:19.6524,信息,开始检索初始数据 2017年4月20日05:05:20.0344,信息,已检索到初始数据 2017年4月20日05:05:20.2044,跟踪,收到通知SystemTimeUpdateNotification 2017年4月20日05:05:21.2144,跟踪,收到通知SystemTimeUpdateNotification
服务器端的日志:
2017年4月20日05:03:31.6069;跟踪;KeepAlive(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017年4月20日05:03:41.6225;跟踪;KeepAlive(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017年4月20日05:03:51.6371;跟踪;KeepAlive(6a12952a-1cb4-4933-b6b1-db16158958a9)2017-04-20 05:04:01.6527;Trace;KeepAlive(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5661;Info;Abort(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5661;Info;删除连接6a12952a-1cb4-4933-b6b1-db16158958a9 2017-04-20 05:05:14.5661;Info;End(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5841;Trace;DrainWrites(6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:14.5841;Info;CompleteRequest (6a12952a-1cb4-4933-b6b1-db16158958a9) 2017-04-20 05:05:19.6344;Info;连接9249a8a5-8653-450c-b8da-c5b7a4c7df81是新的。 2017-04-20 05:05:27.6738;Trace;KeepAlive(9249a8a5-8653-450c-b8da-c5b7a4c7df81) 2017-04-20 05:05:37.6874;Trace;KeepAlive(9249a8a5-8653-450c-b8da-c5b7a4c7df81)现在我来到真正奇怪的部分。那个“偶尔”的时间间隔实际上是相当固定的。我查看了过去几天的日志条目,它总是大约每11小时左右出现一次。
不活动 时间戳 与先前的差异 日志条目自2017年4月17日下午3:58:35以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月17日下午3:58:35以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月17日上午4:57:34以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月16日下午6:56:29以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月16日上午7:55:23以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月15日晚上8:54:17以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月15日上午9:53:09以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。 自2017年4月15日上午9:53:09以来,客户端一直处于非活动状态,并且超过了00:00:50的非活动超时时间。正在停止连接。客户端自2017年4月14日晚上10:52:03以来一直处于非活动状态,已经超过了00:00:50的非活动超时时间。正在停止连接。 客户端自2017年4月14日上午11:50:58以来一直处于非活动状态,已经超过了00:00:50的非活动超时时间。正在停止连接。 客户端自2017年4月14日凌晨12:49:52以来一直处于非活动状态,已经超过了00:00:50的非活动超时时间。正在停止连接。
是否存在最大连接时间或可能导致此行为的原因?
编辑1: 如果我在Window 8上运行相同的代码,则没有此问题。 我想这与Windows 7上正在使用的传输方法有关(不支持WebSockets)。
编辑2:
服务器 客户端 非活动问题 Win 8 Win 8 否 Win 7 Win 7 是 Win 7 Win 8 否 Win 8 Win 7 是
因此,它似乎与客户端的操作系统有关。