У меня возникают проблемы с обработкой событий времени существования подключения на моем клиенте signalR js. Я использую библиотеку npm aspnet / signalr-client на клиенте и библиотека microsoft.aspnetcore.signalr на главном сервере asp.net.
Проблема в
когда я закрываю сервер (alt + F4), запускается клиентский метод onClosed(error)
, я хочу, как это описано в documentation, что метод onReconnecting()
запускается и клиент пытается повторно подключиться. Я уже пытался проигнорировать эту проблему и установить новое соединение в onClosed(error)
методе, но потом получаю Uncaught (in promise) Error: Cannot start a connection that is not in the 'Initial' state.
ошибку.
Мой вопрос
Почему метод onClosed(error)
запускается, а клиент не пытается повторно подключиться и как я могу это исправить?
Код для уточнения:
Клиент
var connection = new signalR.HubConnection('http://localhost:8956/testhub');
connection.on('onStart', function() {
console.log('onStart');
});
connection.on('onEnd', function() {
console.log('onEnd');
})
console.log('connection=', connection);
connection.onClosed = function(error) { // this gets fired
console.log('connection closed');
//setTimeout(function() {
// connection.start();
//}, 10000);
}
connection.onReconnecting = function() { // this not
console.log('trying to reconnect');
}
connection.start();
Серверный концентратор TestHub
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRCoreConsole.Hubs
{
class TestHub : Hub
{
public void Start()
{
Clients.All.InvokeAsync("onStart");
Console.WriteLine("TestHub: Start");
}
public void End()
{
Clients.All.InvokeAsync("onEnd");
Console.WriteLine("TestHub: End");
}
public override Task OnDisconnectedAsync(Exception exception)
{
Console.WriteLine("client disconnected");
return base.OnDisconnectedAsync(exception);
}
public override Task OnConnectedAsync()
{
Console.WriteLine("client connected");
return base.OnConnectedAsync();
}
}
}