2017-07-26 71 views
0

我正在使用帶有聊天模塊的SignalR和帶有角度和AspNet的Ionic項目。 我使用SignalR進行聊天。它運行的很順利,但有些時候我按照下面的屏幕截圖獲得了錯誤,並且因爲它會停止工作。 我在IIS上託管了我的服務,並創建了代理並與客戶端和服務器通信。下面是示例SignalR:出現錯誤:WebSocket已關閉

(function() { 
     angular 
      .module('app') 
      .factory('SignalRFactory', SignalRFactory); 
     SignalRFactory.$inject = ['$rootScope', 'Hub', 'ionicToast']; 
     function SignalRFactory($rootScope, Hub, ionicToast) { 
      var signalRLocal = this; 

      var serverURL = 'https://serivcerURL.com/signalr'; 

      //Hub setup 
      var hub = new Hub('CommunicationHub', { 
       rootPath: serverURL, 
       listeners: { 
        'send': function (data) { 
         console.log("send " + data); 

        } 

       }, 


       errorHandler: function (error) { 
       //Here i am getting that websocket closed error 
        console.error(error); 

       } 
      }); 


      signalRLocal.Connect = function (user) { 
       console.log("SignalR Connecting as :" + user.UserName); 
       hub.invoke('connect', user); 
      }; 


      return signalRLocal; 
     } 
    })(); 

enter image description here

我主持的IIS服務。我搜索的解決方案,並找到像這樣link

我還可以通過使用「長輪詢」與上述鏈路解決方案嘗試按以下

Hub.connection.start({ transport: 'longPolling' }); 

但我不希望使用「長輪詢「。 所以有人可以幫助我解決這個問題,而不使用'長輪詢'。 有人可以告訴我,我必須在客戶端或IIS級別執行什麼配置。

+0

在連接丟失後,SignalR客戶端是否嘗試重新連接?此外,您可以嘗試[檢測斷開原因](https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events #檢測最原因換一個-斷開)。如果可能的話,您也可以從您的Closed事件處理程序(JavaScript客戶端上的「disconnect」事件處理程序)調用Start方法來啓動一個新的連接。 –

+0

yes SignalR嘗試重新連接,它也被連接 –

回答

0

正如我們在評論中所說的,SignalR客戶端將在連接丟失後嘗試重新連接。此外,很多因素(如物理網絡中斷,客戶端瀏覽器故障,服務器脫機等)都可能導致連接丟失,this article解釋了一些斷開連接的情況,您可以參考它並找出可能的原因。

另外,正如我在評論中提到的,您可以從您的Closed事件處理程序(JavaScript客戶端上的斷開事件處理程序)調用Start方法來啓動新連接,以使客戶端在丟失後自動重新建立連接。

編輯:

The connection to ws://localhost:3156/signalr/signalr/connect?transport=webSoc‌​kets&clientProtocol=‌​1.5&connectionToken=‌​g8vpRv9ncVDjPIYB9UuE‌​pAAILEaOcTMTG9p46IA2‌​4 was interrupted while the page was loading.

在 「客戶端斷開的情況」 在the article節,你可以找到:維持一個SignalR連接

在瀏覽器客戶端,該SignalR客戶端代碼在網頁的JavaScript上下文中運行。這就是爲什麼SignalR連接必須在您從一個頁面導航到另一個頁面時結束,這就是爲什麼如果您從多個瀏覽器窗口或選項卡進行連接,那麼您將擁有多個具有多個連接ID的連接。 當用戶關閉瀏覽器窗口或選項卡,或導航到新頁面或刷新頁面時,SignalR連接立即結束,因爲SignalR客戶端代碼會爲您處理該瀏覽器事件並調用Stop方法。

+0

感謝您的重播現在我有一點點在火狐瀏覽器中的錯誤描述錯誤:連接到ws:// localhost:3156/signalr/signalr/connect? transport = webSockets&clientProtocol = 1.5&connectionToken = g8vpRv9ncVDjPIYB9UuEpAAILEaOcTMTG9p46IA24在頁面加載時中斷。 –

+0

Hi @Sagar Hirapara,我編輯了回覆。 –

+0

但如何處理這個。由於這個錯誤,某些功能會停止工作。 –