2012-08-03 9 views
1

J'ai écrit un concentrateur qui implémente l'interface IDisconnect. Je ne sais pas pourquoi Disconnect ne s'exécute jamais. J'ai lu que cela peut ne pas fonctionner avec le débogage de studio visuel, mais je l'ai testé même sur le serveur de production.SignalR IDisconnect côté serveur ne fonctionne pas

Voici mon code:

[HubName("myHub")] 
public class MyHub: Hub, IDisconnect, IConnected 
{ 
    public Task Disconnect() 
    { 
     Log.SaveCurrentTime(); 
     return Clients.leave(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Connect() 
    { 
     return Clients.joined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Reconnect(IEnumerable<string> groups) 
    { 
     return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public void Test() 
    { 
     Log.SaveCurrentTime(); 
    } 
} 

Log.SaveCurrentTime() est à des fins de test uniquement, et enregistrez-datetime en cours ne consignent base de données. Si j'utilise firebug et que j'exécute hub.test() dans la console, tout va bien, mais quand je ferme le navigateur, l'heure actuelle n'est pas enregistrée dans la base de données, donc Disconnect n'est pas exécuté.

Ici j'ajouté le code de

MyHub.js
var hub; 
$(function() { 
hub = $.connection.myHub; 

$.connection.hub.start().done(function() { 
    alert('connected'); 
}) 
}); 
+0

Utilisez-vous le serveur VS intégré? Si c'est le cas, utilisez plutôt IISExpress. – davidfowl

+0

J'ai essayé d'utiliser IISExpress et IIS normal sur le serveur de production. – mrrobot

+0

Cela fonctionne vraiment. Quel navigateur utilisez-vous? Quelle version de SignalR utilisez-vous? – davidfowl

Répondre

0

Votre mise en œuvre est très bien sont vos attentes que cela devrait fonctionner.

Combien de temps attendez-vous? Si vous fermez simplement le navigateur, la déconnexion au niveau du réseau peut prendre un certain temps pour être "remarquée" par IIS et propagée à SignalR.

+0

J'attendais même 1 heure et rien ne s'est passé. Combien de temps normalement, il peut prendre IIS pour "remarquer" que je déconnecté? – mrrobot

+0

Pas si longtemps. :) –

1

Quelle méthode de transport utilise SignalR? Cela peut être différent pour chaque navigateur.

+0

Que voulez-vous dire par "Quelle méthode de transport utilise SignalR"? Comment puis-je vérifier quelle méthode de transport j'utilise? – mrrobot

+0

$ .connection.hub.transport – davidfowl

+0

Je tape $ .connection.hub.transport sur la console chrome et voici ce qu'elle affiche: '$ .connection.hub.transport Objet abandon: function (connection, async) { name : "server-sent events" Reconnect: function (connexion) { envoi: function (connexion, données) { start: function (connexion, onSuccess, onFailed) { arrêt: function (connexion) { timeOut: 3000 __proto__: Object ' – mrrobot

Questions connexes