SignalR:出现错误:WebSocket已关闭

SignalR:出现错误:WebSocket已关闭

问题描述:

我正在使用带有聊天模块的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尝试重新连接,它也被连接 –

正如我们在评论中所说的,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

但如何处理这个。由于这个错误,某些功能会停止工作。 –