SignalR-Hub在IIS停止后,启动将不再调用客户端函数
SignalR-Hub after IIS stop,start will no longer call client functions
我有一个使用SignalR 2.1.1和Angular的队列系统。实际上一切都很顺利。但是,当我决定针对IIS中断测试系统时,我注意到一个问题。当我停止,然后启动IIS, IIS重启不会导致问题,我的javascript函数,集线器调用将不再触发。这对我来说是有意义的,但问题是客户端仍然可以在没有任何问题的情况下调用服务器,因此用户不知道他们已断开连接。这肯定会弄乱我的队列状态。
因此,解决方案似乎能够以某种方式测试这种断开并在必要时重新连接。是否有一种方法可以测试我的集线器正在调用的客户端功能是否仍然连接?似乎因为我可以调用集线器,所以它应该重新连接,尽管我没有看到任何活动发生。我已经在客户端尝试了断开连接,重新连接,statechange事件,看看我是否可以抓住这种情况,没有运气。
感谢您的帮助
所以我的解决方案是在集线器上创建一个只响应调用者的方法:
public void LastChange()
{
Clients.Caller.lastChange();
}
我把这个调用钩回了我的Angular控制器中的这个函数:
vm.queueHub.client.lastChange = function onLastChange()
{
vm.lastChangeCalledBack = true;
}
还在我的控制器中创建了这个函数,该函数测试由hub调用的函数设置的lastChangeCalledBack变量。如果在间隔测试后没有设置,我认为我们已经失去了连接:
vm.stillAlive = function()
{
vm.queueHub.server.lastChange();
var found = $interval(function()
{
if (vm.lastChangeCalledBack == true)
{
vm.lastChangeCalledBack = false;
$interval.cancel(found);
}
}, 100, 10);
return found;
}
最后,我在控制器中创建了这个函数,并从任何从UI更改队列的函数中调用它,并在连接仍然有效的情况下传递回调函数。由于某些原因,这个承诺似乎与Angular文档中所说的相反,但我一定是误解了:
function verifyConnection(callback)
{
vm.stillAlive().then(
function (data) {
console.log("Lost connection with server: " + data);
signalrFactory.start();
var reconnectedMessage = "There was a server disconnect. Your connection has been re-established, but you should reload your browser."
getQueue(function () { alert(reconnectedMessage); });
},
function (data) {
console.log("Server connection intact: " + data);
callback();
}
);
}
例如,这是从UI调用来打开一个模态:
vm.open = function (item)
{
verifyConnection(function () {
openFlagModal(item);
});
};
我还计划定期调用verifyConnection()函数。这种解决方案似乎很有效,并且无论如何都能使所有客户机与服务器保持同步。然而,我不喜欢SignalR客户端已经向服务器发送ping, 和重新建立连接,只是没有重新连接回调客户端方法的事实。这让我怀疑我是否做错了什么,导致客户端函数不能重新连接。
对这个解决方案有什么想法吗?
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 当控制台不在't在chrome中打开,有些项目不再可点击(有些js调用停止工作)
- jquery ui模式框中的表单隐藏后,键盘将不再被调用
- Ajax调用(使用jquery)在5分钟后不再得到响应
- 当鼠标不再位于导航链接上时,如何调用函数
- 当鼠标(或手指)不再拖动时,我怎么能只在更改时运行AJAX调用呢
- 我可以调用一个不再存在的JS函数,但我可以'在我看来,没有调用新的JS函数
- SignalR-Hub在IIS停止后,启动将不再调用客户端函数
- jQuery json Ajax调用不再工作后第一次(包括表单提交,setTimeout)
- 处理调用可能不再可用的变量的异步函数的最佳实践是什么?
- JavaScript 在AJAX调用后不再工作