web-dev-qa-db-fra.com

Comment déterminer la déconnexion du serveur du client SignalR?

La question est de savoir comment le client JavaScript de SignalR peut-il détecter le moment où la connexion avec le serveur est perdue?

Merci pour toute réponse!

23
Alexandr

Un hub a une méthode disconnect qui vous permettra d'ajouter un rappel lorsque la déconnexion a lieu:

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

Si vous n'utilisez pas de hubs, le code de la méthode de déconnexion vous aidera:

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

Cela montre la syntaxe à suivre pour se connecter à l'événement onDisconnect de la connexion sous-jacente.

28
John Rayner

Si vous utilisez des concentrateurs, implémentez l'interface IDisconnect.

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

Sur les connexions persistantes, vous pouvez remplacer OnDisconnectAsync, (À partir du wiki de SignalR à https://github.com/SignalR/SignalR/wiki/PersistentConnection ).

public class MyEndPoint : PersistentConnection 
{
    protected override Task OnDisconnectAsync(string clientId) 
    {
        return Connection.Broadcast("Client " + clientId + " disconncted");   
    }
}
12
MatteKarla

La façon de faire de SignalR 2.0 est la suivante:

$.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
gholmes

À partir de SignalR v0.5.1, cela fonctionne comme suit:

$.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!");
    }
});

Pour plus de détails, visitez ce site:

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

5
bp74

Le ci-dessous, a travaillé pour moi:

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

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

J'utilise la version 2.1.2

Voir le lien suivant pour référence: Link

3
martinmose

Cela a fonctionné pour moi avec le paquet "@aspnet/signalr": "^1.0.0" npm 

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

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