2012-12-11 38 views
2

我遇到了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設置?任何想法要檢查什麼? 順便說一句,我試過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()); 
       }); 
+0

你的客戶代碼是什麼? –

+0

用客戶端代碼更新了問題。 – Giedrius

+0

在服務器上放置一個斷點,當您通過Chrome啓動連接時,確保您的服務器端方法觸發。通常發生掛起不能實例化連接。 –

回答

2

找到了答案。
我們有在jQuery的遠程驗證使用這段代碼(以避免比賽條件)夫婦地方:

$.ajaxSetup({ async : false }); 

所以,當我刪除它,SignalR開始在Chrome工作的罰款。有趣的是,在FireFox上它沒有任何影響 - 它可以使用或不使用這行代碼。