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;
}
})();
我主持的IIS服务。我搜索的解决方案,并找到像这样link
我还可以通过使用“长轮询”与上述链路解决方案尝试按以下
Hub.connection.start({ transport: 'longPolling' });
但我不希望使用“长轮询“。 所以有人可以帮助我解决这个问题,而不使用'长轮询'。 有人可以告诉我,我必须在客户端或IIS级别执行什么配置。
正如我们在评论中所说的,SignalR客户端将在连接丢失后尝试重新连接。此外,很多因素(如物理网络中断,客户端浏览器故障,服务器脱机等)都可能导致连接丢失,this article解释了一些断开连接的情况,您可以参考它并找出可能的原因。
另外,正如我在评论中提到的,您可以从您的Closed事件处理程序(JavaScript客户端上的断开事件处理程序)调用Start方法来启动新连接,以使客户端在丢失后自动重新建立连接。
编辑:
The connection to ws://localhost:3156/signalr/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=g8vpRv9ncVDjPIYB9UuEpAAILEaOcTMTG9p46IA24 was interrupted while the page was loading.
在 “客户端断开的情况” 在the article节,你可以找到:维持一个SignalR连接
在浏览器客户端,该SignalR客户端代码在网页的JavaScript上下文中运行。这就是为什么SignalR连接必须在您从一个页面导航到另一个页面时结束,这就是为什么如果您从多个浏览器窗口或选项卡进行连接,那么您将拥有多个具有多个连接ID的连接。 当用户关闭浏览器窗口或选项卡,或导航到新页面或刷新页面时,SignalR连接立即结束,因为SignalR客户端代码会为您处理该浏览器事件并调用Stop
方法。
感谢您的重播现在我有一点点在火狐浏览器中的错误描述错误:连接到ws:// localhost:3156/signalr/signalr/connect? transport = webSockets&clientProtocol = 1.5&connectionToken = g8vpRv9ncVDjPIYB9UuEpAAILEaOcTMTG9p46IA24在页面加载时中断。 –
Hi @Sagar Hirapara,我编辑了回复。 –
但如何处理这个。由于这个错误,某些功能会停止工作。 –
在连接丢失后,SignalR客户端是否尝试重新连接?此外,您可以尝试[检测断开原因](https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events #检测最原因换一个-断开)。如果可能的话,您也可以从您的Closed事件处理程序(JavaScript客户端上的“disconnect”事件处理程序)调用Start方法来启动一个新的连接。 –
yes SignalR尝试重新连接,它也被连接 –