SignalR和IE问题 – 民意调查正在审理中

我有IE和SignalR的问题,我正在使用它在两个数据库之间执行同步操作,在所有情况下,操作在Google Chrome / Firefox / Safari上成功完成。

第一次使用IE时,同步执行成功但只有一次,第二次是挂起的请求堆栈和页面永远冻结。 我在网上找到了一个改变传输模式的解决方案。 但页面仍然冻结。

if (isIE()) { $.connection.hub.start({ transport: ['serverSentEvents','foreverFrame']}).done(function () { progressNotifier.server.DoMyLongAction(); }); }else{ $.connection.hub.start({ transport: ['serverSentEvents','longPolling'] }).done(function () { progressNotifier.server.DoMyLongAction(); }); } 

我正在使用:SgnalR v2.1.0.0 .Net framework v4.5 jquery v1.8

这是一个问题还是我做错了什么?

编辑

我的应用程序使用Jquery进度条,我使用此代码更新此进度条:服务器端:

 Clients.Caller.sendMessage(msg, 5, "Accounts"); 

客户端:

 progressNotifier.client.sendMessage = function (message, value, Entity) { pbar1.progressbar("value", nvalue); }; 

它正在使用Firefox,所以我认为这是一个signalR问题!! 现在我感到困惑,如果它按预期工作,那么是什么导致了这个问题?

您在网上找到的解决方案不太可能帮助您解决问题。

我怀疑你的IsIE()函数是否正确识别IE。 如果是,SignalR应该只是尝试建立“foreverFrame”连接,因为IE甚至不支持“serverSentEvents”。 我不希望IE发出任何“/ signalr / poll”请求,因为这些请求只是由“longPolling”传输产生的。

此外,完全可以预期IE F12工具的网络选项卡中有“待处理”轮询请求。 这是轮询的设计工作时间。 基本上,一旦收到消息,客户端就会发出新的ajax请求(长轮询)来检索新消息。 如果没有立即可用的新消息,服务器将等待(在SignalR的情况下默认为最多110秒,而不是永远),以便在使用新的响应待处理的长轮询请求之前将新消息发送到客户端信息。

除了在网络选项卡下显示待处理的轮询请求之外,您能否准确说明您遇到的问题? 如果您在JS客户端中启用了跟踪 ,提供了控制台输出,并在网络选项卡中显示了所有 “/ signalr / …”请求,那么它也会有所帮助。

您可以尝试使用EventSource (SSE)。

我使用这个: https : //github.com/remy/polyfills/blob/master/EventSource.js但修改后,对于SignalR: http ://a7.org/scripts/jquery/eventsource_edited.js

我正在使用它一年,SignalR只检查window.EventSource ,它的工作原理。