由于某些原因,SignalR在短时间内(大约1小时或更短)后将停止调用客户端方法。我有一个显示警报的页面...非常简单的实现。以下是JavaScript代码:
$(function () {
// enable logging for debugging
$.connection.hub.logging = true;
// Declare a proxy to reference the hub.
var hub = $.connection.alertHub;
hub.client.addAlert = function (id, title, url, dateTime) {
console.log(title);
};
$.connection.hub.start().done(function () {
console.log("Alert Ready");
});
});
如果我刷新页面,它会再次正常工作约一个小时,然后将停止调用客户端事件
addAlert
。日志中没有错误,也没有警告。除了向服务器发送ping之外,日志中的最后一个事件是:
这些事件中的许多事件会短暂出现,然后就会停止,即使服务器仍应该发送它们。[15:18:58 GMT-0600 (CST)] SignalR:在hub“AlertHub”上触发客户端hub事件'addAlert'。
我正在使用Mac上的Firefox 35.0.1和SignalR 2.0.0。
我意识到一个解决方法是每10分钟左右强制刷新页面,但我正在寻找一种修复问题根本原因的方法。
我在服务器上启用了SignalR跟踪。在刷新Alert页面后,我在服务器上创建了一个“警报”,并且警报通过了。我等了大约10分钟,然后再试一次,它未能通过。以下是日志记录(很抱歉过于冗长,不确定哪些是相关的):
SignalR.Transports.TransportHeartBeat Information: 0 : Connection b8b21c4c-22b4-4686-9098-cb72c904d4c9 is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
除此之外,还有数十个 SignalR.Transports.TransportHeartBeat
消息。