2016-09-13 2 views
1

Je crée un chatboard et j'utilise le signalR pour informer les utilisateurs lorsqu'un nouveau commentaire est ajouté sur un statut/message. J'utilise React et j'ai essayé d'ajouter des écouteurs d'événements pour la fonction hub dans différents composants, dans certains composants, cela fonctionne, pas dans d'autres.signalR connection.hub Fonction non appelée dans le composant de réaction

C'est la plaque tournante:

public class CommentHub : Hub 
{ 
    public void UpdateComments(int postId) 
    { 
     try 
     { 
      var context = GlobalHost.ConnectionManager.GetHubContext<CommentHub>(); 
      context.Clients.All.updateNewComments(postId); 
     } 
     catch (Exception ex) 
     { 
      Log.Error(ex.Message); 
     } 
    } 
} 

J'appelle l'écouteur d'événement dans la fonction componentDidMound:

componentDidMount: function() { 
    this.commentUpdateListener(); 
}, 

Et ceci est l'écouteur d'événement:

commentUpdateListener: function() { 
    console.log("in the comment update listener!"); 
    var commentHub = $.connection.commentHub; 

    commentHub.client.updateNewComments = function (postId) { 
     console.log("updateNewComments called!"); 
    }; 

    $.connection.hub.start(); 
}, 

J'ai Réaction du composant pour un message/statut, un composant pour le "wall/newsfeed" puis j'ai un composant pour le "c omment box "pour chaque statut sur le mur, où les commentaires sont rendus. Lorsque je place l'écouteur d'événement dans le composant de mur ou le composant de publication, cela fonctionne, et la fonction «updateNewComponent» est appelée, mais pas quand je la place dans le composant «boîte de commentaires».

Toujours "dans l'écouteur de mise à jour de commentaire!" est enregistré, peu importe où je place l'écouteur d'événement, mais la fonction de concentrateur n'est pas toujours appelée, et il semble importer dans quel composant de réaction l'écouteur d'événement est placé.

Est-ce que $ .connection.commentHub ne reste pas en vie? Est-ce la fermeture? Y at-il une raison pour laquelle la fonction n'est pas toujours appelée?

Répondre

0

Vous pouvez activer la journalisation avant de commencer la connexion du moyeu comme celui-ci:

$.connection.hub.logging = true; 
$.connection.hub.start(); 

Si vous voyez quelques déconnexions vous pouvez essayer de redémarrer la connexion quand il se ferme:

$.connection.hub.disconnected(function() { 
    setTimeout(function() { 
     $.connection.hub.start(); 
    }, 5000); // Restart connection after 5 seconds. 
}); 

Pour en savoir plus: Understanding and Handling Connection Lifetime Events in SignalR