2014-02-18 98 views
1

我正在研究一個asp.net mvc項目,我們在不同視圖中使用SignalR進行實時連接。很好的工作,除了在SignalR出現問題時停止執行javascript。通常,如果我的自行託管應用程序關閉或發生其他連接問題,則此錯誤將成爲問題。如何防止signalR錯誤停止進一步執行javascript

GET http://localhost:8081/signalr/hubs net::ERR_CONNECTION_REFUSED List:328 
Uncaught TypeError: Cannot read property 'client' of null 

如前所述,如果已發生,它阻止我的所有其他的javascript從執行,因此不會使我的看法,或佈局對於這個問題,正確的。有沒有辦法解決這個問題,所以視圖繼續加載並運行其JavaScript?

我的標準視圖應該是這樣的:

@model Services.Models.SomeModel 
<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 
<script src="http://localhost:8081/signalr/hubs"></script> 
<script src="~/Scripts/signalR.connector.js"></script> 
<script src="~/Scripts/signalR.fleet.js"></script> 
<div id="page-content"> 
    ... 
</div> 

連接器看起來是這樣的:

$.connection.hub.url = "http://localhost:8081/signalr"; 

//Enable logging 
$.connection.hub.logging = true; 

// Proxy created on the fly 
var messageHub = $.connection.myHub; 
if (messageHub == null) 
    return null; 

messageHub.client.timeEnabled = true; 

... ommitted functions ... 


$.connection.hub.start(function() { 
     var id = $('#signalRId').text(); 
     messageHub.server.joinGroup("operationStatus-" + id); 
     console.log("Joined group: operationStatus-" + $('#signalRId').text()); 
}).done(function() { 
     console.log('Now connected, connection ID=' + $.connection.hub.id); 
     } 
).fail(function() { console.log('Could not Connect'); }); 

回答

1

不能完全確定你問什麼,但這裏是我的想法 - 你的基本工具...

  1. 檢查使用try/catch語句有問題的條件

    if (messageHub) { 
        // set up client hub methods and start connection ... 
    } else { 
        // /signalr/hubs script didn't load properly, so skip setting up signalr 
    } 
    
  2. (對於可能導致問題但難以預測的事情);閱讀jquery.signalR-*,看看哪些錯誤可能由

  3. 一個全局錯誤處理程序使用window.onerroralso see this SO post)的SignalR代碼拋出:

    window.onerror = function(message, url, lineNumber) { 
        console.log(message); 
    }; 
    
+0

感謝拉斯,你理解錯了我!期待明天嘗試這個:) –

1

我有這個問題爲好。一個簡單的方法是在完成的回調中設置一個布爾值。

connected = true; 

每個請求之前然後檢查。

我寫了一個lib,它能夠處理我所有的SignalR東西,並給我成功和錯誤回調。在這種情況下,我會得到一個errorCallback,其內容爲「未連接」或其他內容。使用lib你只需要寫一次。