SignalR - IE中的Forever Frame在空闲几分钟后停止工作

时间:2012-09-04 17:07:50

标签: internet-explorer iframe comet signalr

我在IE9中使用SignalR,不幸的是,它必须降级为使用永久帧连接。

我花了一些时间用IE中的开发者工具来看这个。我可以看到回调加载到动态插入的IFrame中,并且它们在SignalR插件中调用receive函数。然而,在大约20/30之后,它只是停止响应 - 我不能再从服务器调用客户端脚本。

我猜测IFrame加载最终超时,但似乎没有为此引发任何事件,因此我无法强制重新连接。

有没有人设法在IE中使用强大的SignalR连接?

谢谢:)

4 个答案:

答案 0 :(得分:9)

我们遇到一个问题,网站上的Javascript会停止工作,特别是我们注意到Ajax调用不起作用。经过一番调查,我们发现SignalR是导致崩溃的原因,我们发现了这篇关于Forever Frames的帖子。我们尝试使用客户端JavaScript中的以下代码删除SignalR中的Forever Frames支持:

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });

因此只支持'webSockets','serverSentEvents','longPolling'。

答案 1 :(得分:2)

根据this Github问题,这已在jQuery 1.10.1中修复。

问题在1.9.x中引入,并在1.10.1上修复。

使用JQuery 1.8.1运行似乎也有效。

解决方案:更新jQuery

答案 2 :(得分:1)

每当我看到这种情况发生时,我实际上已经在后台运行了流氓,僵尸IE9进程。他们甚至没有与他们相关的窗口。因此,我会去杀死那些僵尸并重新启动IE的新实例,并且长时间没有问题,直到任何分析导致问题再次发生。

听起来很疯狂我知道,但是我花了很长时间向David Fowler解释问题的症状以及我怎么也看不出任何理由让iFrame神奇地停止触发事件以让传输知道启动下一个iFrame会话。 SignalR消息本身总是正确终止逻辑消息流,onreadystatechange事件将停止触发。

答案 3 :(得分:0)

将此文件放入文档就绪事件中,所有iframe问题都将得到解决:

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });