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.jsvar hub;
$(function() {
hub = $.connection.myHub;
$.connection.hub.start().done(function() {
alert('connected');
})
});
Utilisez-vous le serveur VS intégré? Si c'est le cas, utilisez plutôt IISExpress. – davidfowl
J'ai essayé d'utiliser IISExpress et IIS normal sur le serveur de production. – mrrobot
Cela fonctionne vraiment. Quel navigateur utilisez-vous? Quelle version de SignalR utilisez-vous? – davidfowl