Obtenir de l'actuel, pôle d'SignalR
Est-il un bon moyen pour appeler des méthodes dans SignalR hub à partir d'un contrôleur ?
Maintenant j'ai ceci:
public class StatsHub : Hub
{
private static readonly Lazy<StatsHub> instance = new Lazy<StatsHub>(() => new StatsHub());
public static StatsHub Instance { get { return instance.Value; } }
public StatsHub()
{
if (this.Clients == null)
{
var hubContext = SignalR.GlobalHost.ConnectionManager.GetHubContext<StatsHub>();
this.Clients = hubContext.Clients;
this.Groups = hubContext.Groups;
}
}
//methods here...
}
donc dans mon contrôleur actions que je peux dire, par exemple
StatsHub.Instance.SendMessage("blah");
et c'est presque bon, sauf que hubContext ne dispose pas de l'Appelant ou de propriétés de Contexte de Hub - qui sont bien d'avoir.
Heureusement, il existe une meilleure façon de le faire ?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez diffuser sur un hub à partir de l'extérieur du moyeu, vous avez besoin
GlobalHost.ConnectionManager.GetHubContext<MyHub>()
à mettre la main sur le hub contexte. Vous pouvez ensuite utiliser ce contexte pour la diffusion via le.Clients
propriété.Comme indiqué dans votre exemple de code, vous bénéficiez déjà acheté le hub contexte, mais de le faire à l'intérieur du moyeu ne fonctionne tout simplement pas, à mon avis. Si vous êtes seulement en utilisant la logique dans
SendMessage()
de vos actions de contrôleur, je voudrais déplacer le code de droit dans l'action du controller et le hub contexte obtenus viaGetHubContext<T>()
à partir de là.Veuillez noter que le
Caller
ouContext
propriété sera toujoursnull
dans ce scénario, parce que SignalR n'était pas impliqué lors d'une requête au serveur et ne peuvent donc pas fournir les propriétés.Trouvé un DefaultHubManager, qui est ce dont j'ai besoin, je pense.
Œuvres. Si il y a encore mieux/le moyen privilégié - s'il vous plaît partager.
DefaultHubManager
existe dans SignalR 2.x cependanthub.Context
est nulle, de sorte que toutes les opérations ne sont pas.