Как определить отключение сервера от клиента SignalR? - PullRequest
23 голосов
/ 01 февраля 2012

Вопрос в том, как клиент JavaScript SignalR может обнаружить потерянное соединение с сервером?

Спасибо за любой ответ!

Ответы [ 6 ]

28 голосов
/ 03 февраля 2012

Концентратор имеет метод disconnect, который позволит вам добавить обратный вызов при отключении:

myHub.disconnect(function() {
  alert('Server has disconnected');
});

Если вы не используете концентраторы, тогда код для метода отключения поможет вамout:

$(connection).bind("onDisconnect", function (e, data) {
  callback.call(connection);
});

Здесь показан синтаксис для подключения к событию onDisconnect базового соединения.

12 голосов
/ 03 февраля 2012

Если вы используете концентраторы, то реализуйте интерфейс IDisconnect.

public class ChatHub : Hub, IDisconnect
{
    public void Disconnect()
    {
        Debug.WriteLine(Context.ConnectionId + " disconnected");
    }
}

На постоянных соединениях вы можете переопределить OnDisconnectAsync, (из вики SignalR на https://github.com/SignalR/SignalR/wiki/PersistentConnection)

public class MyEndPoint : PersistentConnection 
{
    protected override Task OnDisconnectAsync(string clientId) 
    {
        return Connection.Broadcast("Client " + clientId + " disconncted");   
    }
}
5 голосов
/ 30 июля 2014

SignalR 2.0 делает это так:

$.connection.hub.disconnected(function () {
    console.log('Connection disconnected')
});

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#connectionlifetime

5 голосов
/ 20 октября 2012

Начиная с SignalR v0.5.1, он работает следующим образом:

$.connection.hub.stateChanged(function (change) {
    if (change.newState === $.signalR.connectionState.reconnecting) {
        console.log("liveFeed is reconnecting!");
    }
    else if (change.newState === $.signalR.connectionState.connected) {
        console.log("liveFeed is connected!");
    }
});

Для более подробной информации проверьте этот сайт:

http://weblogs.asp.net/davidfowler/archive/2012/06/10/signalr-0-5-1-released.aspx

3 голосов
/ 30 января 2015

Ниже, у меня работает:

var connection = $.hubConnection('signalrConnectionUrl');

connection.disconnected(function() {
    console.log('Connection disconnected');
});

Я использую версию: 2.1.2

См. Следующую ссылку для справки: Ссылка

2 голосов
/ 03 октября 2018

Это сработало для меня, используя пакет "@aspnet/signalr": "^1.0.0" npm

const connection = new signalr.HubConnectionBuilder()
    .withUrl('url')
    .configureLogging(signalr.LogLevel.Information)
    .build()

connection.onclose(() => {
   // close logic goes here
})
...