我遇到了SignalR的問題,至今無法理解爲什麼。 我已經寫了一個長時間處理操作的中心,並注意到它會在FireFox中更新進度,但是Chrome有問題。 所以,我寫了簡單的測試中心,以檢查是怎麼回事:SignalR塊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);
}
}
它做什麼,它增加了進度每隔幾秒鐘。它在兩個瀏覽器中都可以像在乾淨的項目中那樣工作 - 每隔幾秒鐘在瀏覽器中顯示新的進度消息。
但是,當我在真實項目上嘗試它時,它可以正常工作,但在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());
});
你的客戶代碼是什麼? –
用客戶端代碼更新了問題。 – Giedrius
在服務器上放置一個斷點,當您通過Chrome啓動連接時,確保您的服務器端方法觸發。通常發生掛起不能實例化連接。 –