Tengo un servidor ASP.NET Core, que usa SignalR para generar páginas HTML dinámicamente en tiempo de ejecución a través de JavaScript. Después de cerrar mi aplicación, en la consola puedo leer que SignalR está desconectado:
signalr.js:2404 Error: Connection disconnected with error 'Error: Websocket closed with status code: 1006 ()'.La pregunta es: ¿qué debo hacer para configurar SignalR para esperar la conexión entrante nuevamente después de desconectarme? Lo que significa que cuando mi aplicación vuelva a estar activa, la página localhost precargada se conectará automáticamente y continuará trabajando con la nueva instancia de mi aplicación.
La forma en que inicializo SignalR en JS:
var connection = new signalR.HubConnectionBuilder() .withUrl("/foo") .build();Y entonces
connection.on("state", function (state) { // some business logics there }); connection.start().catch(function err() { return console.error(err.ToString()); });Hasta donde yo sé, la biblioteca Signalr Client proporciona la función de reconexión automática. Puede habilitarlo usando withAutomaticReconnect. Tenga en cuenta: Sin ningún parámetro, WithAutomaticReconnect configura el cliente para esperar 0, 2, 10 y 30 segundos respectivamente antes de intentar cada intento de reconexión. Después de cuatro intentos fallidos, deja de intentar volver a conectarse.
También puede escribir códigos para hacer la reconexión manual. Más detalles, puede consultar este artículo .
La respuesta de Brando me llevó a hacer lo siguiente:
var connection = new signalR.HubConnectionBuilder() .withUrl("/foo") .build(); function start() { connection.start().catch(function () { setTimeout(function () { start(); //there we can process any HTML changes like //disabling our loader etc. start() will fail //with exception if there's no server started //and it will try again in 5 seconds }, 5000); }); } connection.onclose(e => { //process here any HTML changes like //showing the loader, etc, an then start(); }) connection.on("foo", function (state) { // some business logics there }); start();Parece una relación típica entre ASP.NET y signalR + javascript vainilla