Клиент signalr js onReconnecting () не запущен

У меня возникают проблемы с обработкой событий времени существования подключения на моем клиенте 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();
        }
    }
}

person Kevin Wüstner    schedule 27.09.2017    source источник


Ответы (1)


SignalR для Asp.NET Core не имеет переподключений. Вы искали onReconnecting в документации предыдущей версии SignalR, но в новой версии этой функции больше нет. Взгляните на объявление, в котором описаны более серьезные изменения между ними.

person Pawel    schedule 27.09.2017
comment
Спасибо. Есть ли какие-нибудь передовые методы работы с отключениями? - person Kevin Wüstner; 28.09.2017
comment
Самое простое - это то, что у вас есть. Однако это не позаботится об отсутствующих сообщениях ... - person Pawel; 28.09.2017