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設定である可能性がありますか?何をチェックすべきかアイデアはありますか?ところで、私は試しましたlongPolling
(serverSendEvents
これは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());
});