2013-02-11 109 views
0

我刚刚使用ASP.NET MVC 4和SignalR创建了一个新的Web应用程序,然后我在4台不同的机器上测试了我的应用程序,所有机器都运行在Windows7 x64和Windows 8以及IE 9和10中的VS2012。在两台机器工作正常,但在其他2我在一段时间后得到以下错误:SignalR:Microsoft JScript运行时错误

Unhandled exception at line 1, column 9 in __http://localhost:4004/signalr?transport=foreverFrame&connectionId=739e3932-48f1-4e1d-8ef2-ea32e15d2929&connectionData=[{"name":"notificationhub"}]&messageId=B,77|C,0|D,0|E,0&tid=9&frameId=1 

0x800a1391 - Microsoft JScript runtime error: 'r' is undefined 

由于这两个机器也已经安装VS2010好奇心,最初他们并没有更新1的安装VS2012,现在我在两台机器上都安装了更新1,但仍然存在错误。

任何想法?

两个失败的机器有W7 x64和两个工作有W7 64位的一个,而另一个具有W8 64

编辑: 我有IE9确定计算机上既没有电脑和IE10和9,还在其中一台故障机器上测试了Google Chrome 20,问题消失了,因此,它似乎与浏览器相关。所以,问题是: 为什么我有一个ie9工作正常,另一个不是?

+1

javascript被缩小了,所以你不能看到只有那些错误。您需要使用完整版本的JavaScript,浏览器也是有问题的,而不是机器。也许某些脚本未加载或未运行。 – Aristos 2013-02-11 18:35:39

+0

@Aristos我已经将jquery.signalR-1.0.0-rc2.min.js更改为jquery.signalR-1.0.0-rc2.js并且问题消失了,因此:min版本可能与其他版本? – jcgalveza 2013-02-11 19:51:08

+1

它非常可能发生缩小的代码来创建在某些情况下不起作用的代码。您可以使用一些自定义缩小(像我这样)来缩小JavaScript代码,并确保这些工作不仅在IE上,而且在其他浏览器上也能正常工作。我用ms ajax缩小了。 – Aristos 2013-02-11 20:09:56

回答

0

你使用SignalR 1.0.0-rc2吗?

它看起来像没有被送到永远的帧头:

<!DOCTYPE html><html><head><title>SignalR Forever Frame Transport Stream</title> 
<script> 
    var $ = window.parent.jQuery, 
     ff = $ ? $.signalR.transports.foreverFrame : null, 
     c = ff ? ff.getConnection('1') : null, 
     r = ff ? ff.receive : function() {}; 
     ff ? ff.started(c) : '';</script></head><body> 

内部消除该前置,在通过永远发送的消息帧,你会得到一个'r' is undefined错误:

<script>r(c, {"json": "message"});</script> 

不应该有可能通过永久帧接收消息而不接收序言,所以这就是为什么我要问你正在使用SignalR的哪个版本。

IE10可能使用WebSockets传输,非IE浏览器很可能使用Sever-sent events这可以解释为什么这些浏览器可以正常工作。

编辑:

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

这是安全的,因为所有的浏览器:如下jcgalveza意见,因为该错误似乎是特定于foreverFrame运输,可以选择性地启动,像这样的连接时禁用SignalR支持长轮询。上面列出的三种传输是SignalR当前支持的所有传输,当然,除了foreverFrame

+0

是的,我正在使用ver 1.0.0-rc2,关于其他浏览器的好,但仍然不明白为什么当我改变到非缩小版本,它开始工作好,也没有解释为什么在某些计算机上工作正常,在其他人不会。两台“不工作”计算机上的常见事情是,他们将VS2010与VS2012并排安装。现在我将jquery.signalR-1.0.0.js包含在一个Bundle中,并且问题再次出现。任何解决这个问题的建议? – jcgalveza 2013-02-11 20:26:39

+0

我发现了一个旧的错误(应该被解决),作为一种解决方法,推荐这个:$ .connection.hub.start({transport:['webSockets','serverSentEvents','longPolling']});而不是$ .connection.hub.start();.如果我这样做,所有浏览器都能正常工作吗? – jcgalveza 2013-02-11 20:28:21

+1

是的。所有浏览器都可以回退到longPolling传输,所以你应该没问题。唯一的问题是,IE <= 9将不得不使用longPolling,其执行效果不如foreverFrame。 – halter73 2013-02-11 20:38:30

相关问题