2017-04-16 6 views
0

J'essaie d'utiliser la méthode Caller en dehors de mon contexte de concentrateur. J'ai une classe d'aide qui fonctionne très bien lors de la diffusion d'un message à tous les utilisateurs comme ceci:SignalR: Utilisation de la méthode d'appel en dehors du contexte du concentrateur

hub.Clients.All.newLessonAlert(notif); 

Il ne me permet pas d'utiliser la méthode de l'appelant au sein de cette classe, mais cela fonctionne bien dans la classe de contexte de plaque tournante. Pourquoi est-ce? J'ai aussi essayé de déplacer toutes mes fonctions à l'intérieur de la classe de contexte mais je reçois maintenant cette exception unhanded:

En utilisant une instance Hub n'a pas été créé par le HubPipeline est non pris en charge

est-il un moyen simple continuer à utiliser ma classe d'assistance et identifier les connexions au concentrateur?

Répondre

1

J'ai résolu ce de la manière suivante:

  1. J'ai créé une méthode onConnected dans ma classe de Hub. Cela a affecté l'utilisateur actuellement connecté à un groupe.

    [HubName("NotificationsHub")] 
    

    public class NotificationHub: Hub {private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext();

    public override Task OnConnected() 
    { 
        string userid = Context.Request.User.Identity.GetUserId(); 
        Groups.Add(Context.ConnectionId, userid); 
        return base.OnConnected(); 
    } 
    

    }

  2. Modified ma classe HubHelper à diffuser maintenant cette alerte à l'utilisateur actuellement connecté (spécifié par l'ID de l'utilisateur)

    public void HighScoreAlert(int gameid, int score, string userID) 
    { 
        string message = "High Score achieved on " + gameid; 
    
        hub.Clients.Group(userID).score(message); 
    } 
    
  3. Pour l'action du contrôleur je passe dans la ID de l'utilisateur, puis appelez la méthode HubHelper décrite ci-dessus.

Hope this helps quelqu'un