SignalR:Microsoft JScript运行时错误

时间:2013-02-11 18:20:48

标签: asp.net-mvc signalr

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

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,最初他们没有安装VS2012的Update 1,现在我在两台机器上安装了Update 1,但仍然有错误。

有什么想法吗?

两台发生故障的机器都有w7 x64,两台机器的w7 x64合二为一,另一台有w8 x64

修改 我在两台发生故障的计算机上都安装了IE9,在OK计算机上安装了IE10和9,还在其中一台发生故障的机器上测试了谷歌Chrome 20,问题就消失了,所以,它似乎与浏览器有关。所以,问题是: 为什么我有一个ie9工作正常而另一个不工作?

1 个答案:

答案 0 :(得分: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,这可以解释为什么这些浏览器可以正常工作。

编辑:正如下面的jcgalveza评论,由于错误似乎特定于foreverFrame传输,因此在启动连接时可以选择性地禁用它,如下所示:

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

这是安全的,因为SignalR支持的所有浏览器都支持长轮询。上面列出的三种传输是SignalR当前支持的所有传输,当然除了foreverFrame