Возможно ли, что событие OnDisconnected будет запущено, даже если соединение не закрыто на сервере SignalR SelfHost?

Мы создали собственный сервер SignalR, и наше настольное приложение WPF подключается к этому серверу. Мы просто занимаемся управлением входом-выходом, все просто и работает. Но через какое-то время, обычно через 2-3 часа, половина клиента пропадает из списка онлайн-клиентов.

Похоже, что на сервере запускается событие OnDisconnected для соединений, даже если они не закрыты. После события OnDisconnected эти соединения все еще могут отправлять и получать данные.

Есть ли какой-либо сценарий, который вызывает событие OnDisconnected, запускаемое на сервере, когда соединение не закрыто?


person Mustafa uçar    schedule 06.04.2016    source источник


Ответы (1)


Есть ли какой-либо сценарий, который вызывает событие OnDisconnected, запускаемое на сервере, когда соединение не закрыто?

да. Если время ожидания соединения истекло, сначала происходит отключение, а затем повторное подключение (если клиент не закрывает соединение явно).

public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
{
    if (stopCalled)
    {
        Console.WriteLine(String.Format("Client {0} explicitly closed the connection.", Context.ConnectionId));
    }
    else
    {
        Console.WriteLine(String.Format("Client {0} timed out .", Context.ConnectionId));
    }

    return base.OnDisconnected();
}

Как вы можете видеть здесь. Если происходит явное отключение (stopCalled имеет значение true), клиент обязательно отключится, и повторного подключения не произойдет.

если клиент действительно не отключен, после отключения может произойти переподключение, как в вашей ситуации.

Проверьте здесь для более подробной информации.

person Erkan Demirel    schedule 06.04.2016
comment
Спасибо за ответ, мы не контролировали событие OnReconnected, я думаю, это была проблема. - person Mustafa uçar; 06.04.2016
comment
пожалуйста, проверьте уникальность идентификатора соединения (если вы его сохранили) на Reconnected. Если повторное подключение происходит без отключения, у вас могут быть повторяющиеся записи. Проверьте здесь asp.net/signalr/ обзор/руководство по API/ - person Erkan Demirel; 06.04.2016