Aufruf von SignalR-Hub-Clients von einer anderen Stelle im System
Ich habe eine SignalR-hub zur Kommunikation zwischen server und client. Die hub-server-Seite code, der gespeichert ist in einer Klasse namens Einhaken.cs. Was ich will ist zu können, rufen Sie eine Methode definiert, die in Einhaken.cs, mir zu erlauben, broadcast-Nachrichten an alle verbundenen clients von überall in meiner Anwendung. Es scheint, dass eine neue Instanz Anschließen.cs ist erstellt für jeden client - /server-Aufruf, so dass ich gehofft hatte, dass ich in der Lage wäre, etwas zu verwenden, wie
var hooking = new Hooking();
hooking.Test();
mit der Methode Test (), definiert in Einhaken.cs wie
public static void Test() {
Clients.test()
}
und mit einem der client-Seite javascript -
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
Leider ist es nicht so einfach, da die Kunden ist nicht statisch, also nicht über eine statische Methode.
Blick durch die SignalR-Quellcodes stieß ich auf eine Methode, die sah vielversprechend aus, Hubs.Invoke(string hubName, string method, params object[] args)
, so würde ich, hoffe ich konnte etwas wie Hubs.Invoke("Hooking", "Test")
aber ich kann nicht damit es funktioniert.
Jede Hilfe bei diesem würde sehr geschätzt
InformationsquelleAutor der Frage Jordan Wallwork | 2011-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der richtige Weg für SignalR 2.x:
Grundsätzlich kann man die dependency resolver für den aktuellen host zu beheben, die
IConnectionManager
interface, welches Ihnen erlaubt, um ahold von Kontext-Objekt für einen hub.Weitere Informationen finden Sie in der offizielle Dokumentation.
InformationsquelleAutor der Antwort Paolo Moretti
Hub.GetClients verschwunden, die in version 0.4.0.
Aus der wiki können Sie nun verwenden:
InformationsquelleAutor der Antwort Greg Ennis
Können Sie leicht ein hub nach dieser 2-Schritt-
Instanziierung von dependency injection wie diese-
2.Mit der
hub
Objekt wie dieses-Mehr gefunden werden kann hier.
Beispiel-code kann gefunden werden in diesem git-repo.
InformationsquelleAutor der Antwort Abrar Jahin
Schauen, wie es gemacht wird
Chat.cs
imSignalR.Samples.Hubs.Chat
aus https://github.com/SignalR/SignalR.Kann ich sehen, dass es statische
Dictionary<TKey, TValue>
's sind instanziiert an der Oberseite, also ich kann mir vorstellen Sie sind gepflegt beharrlich zu, entweder mit derChat
Klasse eine permanente Instanz (?) oder das array aktualisiert, irgendwie.Check it out, David Fowler, wäre wahrscheinlich die beste auf diese.
InformationsquelleAutor der Antwort GONeale