0

ASP.NET MVC 4 と SignalR を使用して新しい Web アプリを作成したところ、Windows7 x64、Windows 8、IE 9 および 10 で VS2012 を実行している 4 台の異なるマシンでアプリをテストしました。 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

好奇心として、これらの 2 台のマシンには VS2010 もインストールされており、元々は VS2012 の Update 1 がインストールされていませんでしたが、現在は両方のマシンに Update 1 をインストールしましたが、まだエラーが発生しています。

何か案は?

両方の失敗したマシンには w7 x64 があり、動作している 2 つのマシンには一方に w7 x64 があり、もう一方には w8 x64 があります。

編集: 失敗したコンピューターの両方で IE9 を使用し、OK コンピューターで IE10 と 9 を使用しました。また、失敗したコンピューターの 1 つで Google Chrome 20 をテストしたところ、問題が解消されたため、ブラウザーに関連しているようです。では、問題は次のとおりです。正常に動作する ie9 と動作しない 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 でサポートされているすべてのブラウザーがロング ポーリングをサポートしているため、これは安全です。上記の 3 つのトランスポートは、SignalR で現在サポートされているすべてのトランスポートforeverFrameです。

于 2013-02-11T19:58:09.063 に答える