Używam SignalR 2 i nie mogę zrozumieć, w jaki sposób mogę korzystać z moich metod Hub, np. Z działania kontrolera.Użyj metod Hub z kontrolera?
wiem, że mogę wykonać następujące czynności:
var hub = GlobalHost.ConnectionManager.GetHubContext<T>();
hub.Clients.All.clientSideMethod(param);
Ale to wykonuje metodę bezpośrednio na stronie klienta.
Co mam zrobić, jeśli mam logikę biznesową po mojej stronie serwera? ClientSideMethod(param)
metoda Chcę wywołać z mojego kontrolera w taki sam sposób, jak po wywołaniu od strony klienta?
W tej chwili używam public static void ClientSideMethod(param)
wewnątrz mojego koncentratora iw tej metodzie używam IHubContext
z ConnectionManager
.
Czy nie ma lepszego sposobu na robienie tego?
Poniższa nie działa (już w SignalR 2):
var hubManager = new DefaultHubManager(GlobalHost.DependencyResolver);
instance = hubManager.ResolveHub(typeof(T).Name) as T;
instance.ClientSideMethod(param);
Tam dostać „Hub nie stworzony przez rurociąg Hub nie jest obsługiwany” wyjątek, gdy dostęp do klientów.
Dlaczego nie zrobić z klientem, które zakładam jest JS, można wykonać żądania Ajax i zrobić co trzeba na kontrolerze – MEYWD
@MEYWD: Ponieważ na przykład mam interfejs administratora, który chciałbym zaktualizować, gdy "coś się stanie". Na przykład. klient odwiedza określoną stronę, więc chciałbym wywołać metodę koncentratora w akcji kontrolera z tej strony. Faktyczny klient nie dba o to, więc dlaczego miałby opublikować tę wiadomość? – ChrFin
Zrobiłem coś podobnego, mam klientów i administratorów (specjalny klient), administrator wysyła polecenie i czeka na odpowiedź od klienta, robiąc to, stworzyłem listę administratorów i listę klientów w hubie, admin wybiera klienta, rezerwuje go, aby żaden inny administrator go nie używał, następnie wysyła polecenie, hub przekazuje je klientowi, klient zwraca odpowiedź do centrum, który w zamian jest przekazywany do administratora, a odpowiedź jest drukowana ekran – MEYWD