2

SignalRに問題があり、これまでのところその理由を理解できません。大量注文処理操作用のハブを作成しましたが、FireFox内で進行状況が正常に更新されることに気付きましたが、Chromeに問題があります。だから、私は何が起こっているのかをチェックするための簡単なテストハブを書きました:

public class SimpleHub: Hub
{
    public void LongProcess()
    {
        System.Threading.Thread.Sleep(2000);            
        Clients.Caller.AddProgress("Step 1 of 5 has completed.");
        System.Threading.Thread.Sleep(2000);
        Clients.Caller.AddProgress("Step 2 of 5 has completed.");
        System.Threading.Thread.Sleep(3000);
        Clients.Caller.AddProgress("Step 3  of 5 has completed.");
        System.Threading.Thread.Sleep(1000);
        Clients.Caller.AddProgress("Step 4 of 5 has completed.");
        System.Threading.Thread.Sleep(4000);
        Clients.Caller.AddProgress("Step 5 of 5 has completed.", true);
    }
}

それが何をするか、それは数秒ごとに進歩を追加します。両方のブラウザのクリーンプロジェクトで想定されているとおりに機能します。数秒ごとに、ブラウザに新しい進行状況メッセージが表示されます。
しかし、実際のプロジェクトで試してみると、Firefoxでは問題なく動作しますが、ChromeではUIを完全にブロックしているように見え(Chromeコンソールを再描画することさえありません)、LongProcessが終了したときにのみすべての進行状況メッセージが追加されます。
だから問題は、これの原因は何である可能性があります-いくつかのjQuery設定である可能性がありますか?何をチェックすべきかアイデアはありますか?ところで、私は試しましたlongPollingserverSendEventsこれはChromeのsignalRによって自動的に選択されました)、両方で同じ結果です。

更新:クライアントコードを追加:

var hub = $.connection.SimpleHub;

hub.client.AddProgress = function (progress) {
   $("#placeOrderProgress").append('<li><span>' + progress + '</span><i></i></li>');
};              

$.connection.hub
            .start()
            .done(function () {                    
                      hub.server.longProcess($('#checkoutForm').toJSON());
                 });
4

1 に答える 1

2

答えが見つかりました。
jQueryリモート検証がこのコードの一部として使用されている場所がいくつかありました(競合状態を回避するため)。

$.ajaxSetup({ async : false });

そのため、削除すると、SignalRはChromeで正常に動作し始めました。興味深いことに、FireFoxでは影響はありません。このコード行の有無にかかわらず機能します。

于 2012-12-12T14:12:17.927 に答える