L'appel de SignalR hub clients d'ailleurs au système
J'ai mis en place un SignalR hub pour communiquer entre le serveur et le client. Le serveur concentrateur de côté le code est stocké dans une classe appelée Accrochage.cs. Ce que je veux, c'est être capable d'appeler une méthode définie dans l'Accrochage.cs pour me permettre de diffuser des messages à tous les clients connectés à partir de n'importe où dans mon application. Il semble qu'une nouvelle instance de l'Accrochage.cs est créé pour chaque client/serveur, alors j'avais espéré que je serais en mesure d'utiliser quelque chose comme
var hooking = new Hooking();
hooking.Test();
avec la méthode Test() définie dans l'Accrochage.cs comme
public static void Test() {
Clients.test()
}
et avec le côté client javascript
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
Malheureusement, il n'est pas simple, car les Clients n'est pas statique, donc pas accessible à partir d'une méthode statique.
À la recherche par le biais de la SignalR code source, je suis tombé sur une méthode qui avait l'air prometteur, Hubs.Invoke(string hubName, string method, params object[] args)
, donc j'espère que je pourrais utiliser quelque chose comme Hubs.Invoke("Hooking", "Test")
mais je ne peux pas le faire fonctionner.
L'aide de ce serait très apprécié
- Mais peut-être que vous pourrez m'aider 😉 une idée de la façon d'effectuer votre code js dans votre message de diffusion pour tous les autres clients, et non pas de l'origine de l'appelant qui a émis le message? 🙂
- Malheureusement je ne suis pas. J'ai été la manipulation de ce côté client, l'envoi de l'id du client de retour avec la réponse, et tout simplement pas à l'appel de la fonction si l'id du match
Vous devez vous connecter pour publier un commentaire.
Ce est la bonne façon pour SignalR 2.x:
Fondamentalement, vous pouvez utiliser le solveur de dépendances pour l'hôte actuel de résoudre le
IConnectionManager
interface qui vous permet de vous approprier l'objet de contexte pour un hub.De plus amples informations peuvent être trouvées dans la la documentation officielle.
Hub.GetClients a disparu dans la version 0.4.0.
De la wiki vous pouvez maintenant utiliser:
using SignalR.Infrastructure;
Vous pouvez facilement utiliser un hub par la suite de cette étape 2-
L'instanciation par l'injection de dépendance, ce
2.À l'aide de la
hub
objet comme celui-Plus peut être trouvé ici.
Exemple de code peut être trouvé dans ce repo git.
Regarder comment c'est fait dans
Chat.cs
dansSignalR.Samples.Hubs.Chat
de https://github.com/SignalR/SignalR.Je peux voir, il y statique
Dictionary<TKey, TValue>
's sont instanciés en haut, donc j'imagine qu'ils sont maintenues constamment trop, soit avec leChat
classe une instance persistante (?) ou que la matrice de mise à jour en quelque sorte.Check it out, David Fowler serait probablement le meilleur sur ce.