2012-09-04 91 views
5

我在IE9中使用SignalR,不幸的是,它必須降級爲使用永久幀連接。SignalR - IE中的Forever Frame在空閒幾分鐘後停止工作

我花了一些時間用IE中的開發工具來看這個。我可以看到加載到動態插入的IFrame中的回調,並且他們在SignalR插件中調用receive函數。但是,大約20/30這些它只是停止響應 - 我不能再從服務器調用客戶端腳本。

我猜IFrame負載終於超時,但似乎沒有提出這個事件,所以我不能強制重新連接。

有沒有人設法得到一個強大的SignalR連接在IE中工作?

謝謝:)

+1

什麼版本SignalR您使用的是?我曾經在IE9中老版本的SignalR中一直觀察這一點,但我再也不會像0.5那樣看到它了。 –

+1

我也看到這個在IE9上0.5.3在JabbR上,必須切換到longPolling那裏使它可靠。還沒有能夠找出究竟發生了什麼。 –

+0

@DrewMarsh我正在使用NuGet上的最新版本 - 0.5.3 – Kram

回答

1

每當我看到這樣的情況,我實際上有流氓,殭屍IE9在後臺運行的進程。他們甚至沒有與他們有關的窗口。所以,我會去殺那些殭屍,並重新啓動一個新的IE實例,並且不會有問題很長一段時間,直到無論什麼原因導致問題再次發生。

聽起來很瘋狂我知道,但我花了很長時間向David Fowler解釋問題的症狀,以及我怎麼永遠也看不到任何理由讓iFrame神奇地停止發射事件,讓交通工具知道開始下一個iFrame會話。 SignalR消息本身總是正確地終止邏輯消息流,onreadystatechange事件只會停止觸發。

+0

目前,目前沒有解決此問題的方法嗎?除了在任務管理器中關閉舊的ie9任務? = /我也在Safari中遇到相同的問題 – anthonypliu

+0

我遇到的問題,不......這是iframe在IE中工作的方式,它會停止將準備好的狀態更改事件發回主窗口,直到我殺死壞的IE進程。 –

8

我們遇到了一個問題,那就是網站上的Javascript會停止工作,特別是我們注意到Ajax調用不起作用。經過一番調查,我們發現SignalR是墜機的原因,並且我們發現了這篇關於Forever Frames的文章。我們試圖消除永遠框顯SignalR在客戶端的JavaScript下面的代碼支持:

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

因此,只有支持「的WebSockets」,「serverSentEvents」,「longPolling」。

+0

或者您可以在1-2分鐘後設置超時,以便客戶端需要重新連接。 –

+0

崩潰?崩潰在這種情況下意味着什麼 – davidfowl

+0

編輯後的精度。 JavaScipt崩潰:也就是說,其他Ajax調用將停止工作(具體來說,在Ajax調用中返回部分視圖的操作將改爲重定向到新頁面)。 – Doff3n

1

根據this Github問題在jQuery 1.10.1中修復了這個問題。

該問題是在1.9.x中引入的,並且在1.10.1上得到了修復。

運行JQuery 1.8.1它似乎也工作。

解決方法:更新的jQuery

0

在文檔準備事件將這個與所有的IFRAME的問題將得到解決:

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