Ho configurato un hub SignalR per comunicare tra il server e il client. Il codice lato server hub è memorizzato in una classe chiamata Hooking.cs. Quello che voglio è poter chiamare un metodo definito in Hooking.cs per permettermi di trasmettere messaggi a qualsiasi client connesso da qualsiasi punto della mia applicazione. Sembra che una nuova istanza di Hooking.cs viene creato per ogni chiamata client/server, quindi mi aveva sperato che sarei stato in grado di usare qualcosa comeChiamare client hub SignalR da qualsiasi altra parte nel sistema
var hooking = new Hooking();
hooking.Test();
con il Metodo() definita in Hooking.cs come ad esempio
public static void Test() {
Clients.test()
}
e con un lato client JavaScript
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
Purtroppo non è che semplice, poiché i client non sono statici, quindi non accessibili da un metodo statico.
Guardando attraverso il codice sorgente SignalR mi sono imbattuto in un metodo che sembrava promettente, Hubs.Invoke(string hubName, string method, params object[] args)
, quindi spero di poter usare qualcosa come Hubs.Invoke("Hooking", "Test")
ma non riesco a farlo funzionare.
Qualsiasi aiuto con questo sarebbe enormemente apprezzato
Ma forse puoi aiutarmi;) Qualche idea su come eseguire il tuo codice js nel messaggio broadcast per tutti gli altri client, e non il chiamante che ha emesso il messaggio? :) – GONeale
Purtroppo no. Ho gestito questo lato client, restituendo l'ID client con la risposta e semplicemente non richiamando la funzione se la corrispondenza dell'ID –