角度 SignalR 经常断开连接并显示错误状态代码 1006
Posted
技术标签:
【中文标题】角度 SignalR 经常断开连接并显示错误状态代码 1006【英文标题】:angular SignalR frequently disconnect with error status code 1006 【发布时间】:2021-07-18 09:44:14 【问题描述】:我在使用 signalR 时遇到了一些问题,但我找不到问题所在。 我可以建立连接并获取事件,但客户端会随机断开连接并出现此错误:“错误:连接断开并出现错误‘错误:Websocket 已关闭,状态码为:1006()。’”
我在 angular 和 AspNetCore .core 5 SignalR 上使用 @microsoft/signalr 版本 5.0.8。 该网站托管在 IIS 10 中。
客户端代码:
createSignalrConnection()
var comp = this;
this.signalR = new signalR.HubConnectionBuilder()
.withUrl(environment.signalrEndpoint + "/triggers")
.withAutomaticReconnect()
.build();
this.signalR.start();
this.signalR.onreconnecting(error=>
console.log(error.toString(), " reconnect..");
);
this.signalR.on('TriggerMessage', (message: string)=>
try
comp.eventManager.emit("triggerEvent", machine);
catch(err)
console.log(err.toString());
);
服务器端代码:
Startup.cs
public void ConfigureServices(IServiceCollection services)
services.AddSignalR(hubOptions =>
hubOptions.EnableDetailedErrors = true;
);
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
app.UseEndpoints(endpoints =>
endpoints.MapHub<TriggersHub>("/triggers");
);
TriggersHub.cs
public class TriggersHub: Microsoft.AspNetCore.SignalR.Hub
public async Task SendMessage(MachineJitData message)
await Clients.All.SendAsync("TriggerMessage", JsonConvert.SerializeObject(message));
EventsController.cs
public class EventsController
protected ILoggerService _logger get;
protected AppSettings _appSettings get;
protected IDataService _dataService get;
protected IHubContext<TriggersHub> _hubContext get;
public EventsController(IOptions<AppSettings> appSettings, ILoggerService logger, IDataService dataService, IHubContext<TriggersHub> hubContext) : base(appSettings)
_appSettings = appSettings.Value;
_logger = logger;
_dataService = dataService;
_hubContext = hubContext;
[HttpPost]
[Route("data-trigger")]
public async Task GetMonitorRefreshTrigger([FromBody] MachineJitData data)
var new_jit_data = await _dataService.UpdateMachineJitData(data);
await _hubContext.Clients.All.SendAsync("TriggerMessage", JsonConvert.SerializeObject(new_jit_data, new JsonSerializerSettings() ContractResolver = new CamelCasePropertyNamesContractResolver() ));
【问题讨论】:
这能回答你的问题吗? getting the reason why websockets closed with close code 1006 【参考方案1】:而对于这个问题,我们需要知道当 chrome 不符合 websocket 标准时,它会显示这个错误。因此,您可以尝试通过websocket.onerror(evt)
查找更多详细信息。但有时chrome不会向javascript端报告任何关闭代码1006的原因。你也可以使用火狐来做这个操作,火狐可以将细节上报给Javascript端。
更多详情也可以参考cmets中提到的this post@Ori。
对了,如果你用的是nginx,也可以试试为proxy_read_timeout
设置一个long time值。
【讨论】:
您好!我尝试按照您的建议在 Firefox 上对其进行调试,结果如下: optimizer.js:99:44: 到 wss://some.url.com/triggers?id=WQeYB5Ek2WL0RuiCJ3ipCA 的连接在页面加载时中断。 @Ori 你能试试这个post的解决方案吗。以上是关于角度 SignalR 经常断开连接并显示错误状态代码 1006的主要内容,如果未能解决你的问题,请参考以下文章
Signalr 带有角度和 .net 核心错误,代码为 1006
SignalR Asp.netcore 和 angular(WebSocket 未处于 OPEN 状态)断开信号R.HttpTransportType.WebSockets