0

我刚刚使用 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 的更新 1,现在我在两台机器上都安装了更新 1,但仍然有错误。

有任何想法吗?

两台失败的机器都有 w7 x64,两台工作的机器有 w7 x64 合二为一,另一台有 w8 x64

编辑: 我在失败的计算机上安装了 IE9,在正常的计算机上安装了 IE10 和 9,还在其中一台失败的机器上测试了 Google Chrome 20,问题消失了,所以,它似乎与浏览器有关。所以,问题是:为什么我有一个 ie9 可以正常工作而另一个不能?

4

1 回答 1

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 浏览器可能使用服务器发送事件,这可以解释为什么这些浏览器可以正常工作。

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

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

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

于 2013-02-11T19:58:09.063 回答