SignalR& IE问题 - 民意调查正在审理中

时间:2014-10-15 09:13:02

标签: javascript jquery internet-explorer signalr signalr-hub

我遇到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框架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问题!!现在我感到困惑,如果它按预期工作,那么是什么导致了这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

我正在使用它一年,SignalR只检查window.EventSource它是否有效。

答案 1 :(得分:0)

您在网上找到的解决方案可能无法解决您的问题。

我怀疑你的IsIE()函数是否正确识别IE。如果是的话,SignalR应该只是试图建立一个永远的框架#34;连接,因为IE甚至不支持" serverSentEvents"。我不希望IE做任何" / signalr / poll"请求,因为这些请求仅由" longPolling"运输。

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

除了在网络标签下显示待处理的投票请求之外,您能否准确说明您遇到的问题?如果您enabled tracing in the JS client,提供控制台输出,并显示 all " / signalr /...",它也会有所帮助;网络标签中的请求。