我们遇到了这个指定不同超时属性的链接:https: //github.com/SignalR/SignalR/wiki/Configuring-SignalR
还有一个很好的帖子(什么时候重新连接signalR会出现?)关于SignalR客户端和SignalR服务器之间如何断开连接和重新连接.
只是为了重复上述帖子中的不同情况:
"当客户端脱机然后不久重新获得连接时,就会发生集线器重新连接.SignalR配置值很大程度上决定了以下示例的时间戳,因此不要逐字记录时间.
以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss):
情况1
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于ISP问题,客户端失去连接(并意识到它失去了连接)
0:15 - 客户重获连接
0:16 - 触发OnReconnected事件
情况2
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开连接)
0:15 - 客户重获连接
这里可能发生两件事
答:0:16 - 没有任何反应,客户继续使用之前的连接
B:0:~45 - 客户端实现断开连接*
B:0:46-客户端转换到重新连接状态
B:0:47 - 客户端成功重新连接并触发OnReconnected事件.
情况3
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开连接)
0:~45 - 客户实现其断开连接*
0:46 - 客户端转换到重新连接状态
1:15 - 服务器确定客户端已经消失了太长时间然后忘记它,排队一个"断开连接"命令,让客户端接收它,如果它稍后重新连接.***
1:15 - OnDisconnect以1:16触发 - 客户重新获得连接
1:17 - 客户端进行"软"重新连接(不触发OnReconnected)
1:18 - 客户端检索"disconnect"命令
1:19 - 客户端调用"停止"并进行软断开(不触发OnDisconnected)
情况4
0:00 - 客户端连接到服务器,触发OnConnected
0:10 - …
我们已经创建了一个自定义Windows服务.部署包在InstallShield中完成,安装程序会提示输入服务登录帐户的用户名和密码.
我们在各种Windows 7(专业版)和Windows 8计算机上都没有遇到任何问题,但在尝试部署到Windows 7 Ultimate计算机时遇到了1920错误.我们尚未确认该问题是否与操作系统或我们尝试安装此功能的特定计算机有关.
始终通过右键单击"以管理员身份运行"来运行安装程序,并且用户(运行安装程序的用户和提供凭据的登录用户)都是计算机上的管理员.通常,安装服务的登录用户和运行服务的登录用户是相同的.
以下是我们尝试过的事情.
但上述工作都没有.
希望其他人遇到类似的问题,并有一个修复..
更新:
我也尝试过以下方法:
我们遇到了一个有趣的问题.以下是我们的设置:
最初我们使用SignalR 0.5.3 - 当我们开始观察到Windows服务与信号R服务器的连接中断时.频率范围从每几分钟到每几个小时.它在大多数情况下重新连接,但偶尔无法重新连接,导致Windows服务每两天丢失一次连接.但它没有固定的模式.这是不相关的服务器重启/备份等,我们添加记录到Windows服务来监视客户端连接上StateChanged事件,并发现,当断开并重新连接会触发该事件,但不能当它不重新连接.
然后我们遇到了这个帖子:客户经常重新连接
并决定将所有内容升级到SignalR 1.0.1(我们不得不在某些时候这样做).Windows服务也升级到框架4.5(来自Framework 2.0),现在引用新的Microsoft.AspNet.SignalR.Client.dll.这也允许我们(使用新添加的连接属性)确定Windows服务实际上使用ServerSentEvents协议.在Windows Server 2012计算机上安装相同的Windows服务使用WebSockets协议.这与此线程一致:SignalR .NET Client不支持Windows 7上的WebSockets
但是,Windows Server 2008 R2服务器上的服务行为没有更改.它仍然断开连接并重新连接,偶尔会失去连接.由于一些限制,我们无法使用Windows Server 2012进行Windows服务,并且无法使用较旧的操作系统.这并不是说使用websockets协议的Windows服务可以解决我们所有的问题(我们没有彻底测试过).
我们尝试的第三件事是从GitHub获取源代码并编译它并升级服务(SignalR Server和客户端) - 这样做是为了确保我们获得带有任何潜在错误修复的最新副本.
但它没有帮助.我们现在处于一种我们认为已经筋疲力尽的选择.建议将不胜感激.谢谢.
=====================================
编辑:更多信息:
好的,现在我们有更多的信息.我们在Windows服务(SignalR Client)中添加了一些代码,每30分钟登录一次SignalR服务器(用于测试连接).
以下是客户端每30分钟发生的事情:
WriteEvent(Now(), "INFO", "PING", "Performing logon procedure with SiteCode = " & msSiteCode & ".")
trans.Invoke("login", New String() {msSiteCode, "", "SERVER", "", ""})
Run Code Online (Sandbox Code Playgroud)
其中trans是从Hub继承的服务器端类的实例,而WriteEvent基本上是写入日志文件的跟踪.
客户端也有一个'isLoggedIn'方法,如下所示:
Private Sub isLoggedIn(ByVal bLoggedIn As String)
If bLoggedIn Then
WriteEvent(Now(), …Run Code Online (Sandbox Code Playgroud) MySQL 数据库
我们使用 MySQL RDS 数据库。我们的 Web 应用程序使用带有“CertificateFile=”选项的连接字符串,该选项当前设置为 2015 证书文件,以及“SSL Mode=Required;” 选项。
我们使用 AWS控制台中的说明更改了测试数据库以使用 2019 证书。我们立即提交了更改(因为这只是测试数据库)。我们预计此时来自 Web 应用程序的连接会失败,但它们仍然可以使用较旧的 2015 证书文件。
附加信息
所以我的猜测是,直到 2020 年 3 月(2015 年证书到期时),连接都是向后兼容的,即 2015 年证书在到期之前一直有效,与服务器证书无关。
这是一个正确的假设吗?