I've successfully setup a SignalR server and client using the newly released ASP.NET Core 2.1. I built a chat room by making my ChatHub
extend Hub
: whenever a message comes in from a client, the server blasts it back out via Clients.Others
.
What I do not yet understand is how to send a message to clients not as a response to an incoming message. If the server is doing work and produces a result, how do I gain access to the Hub
in order to message particular clients? (Or do I even need access to the Hub
? Is there another way to send messages?)
Searching this issue is difficult as most results come from old versions of ASP.NET and SignalR.
When user click on send button, the message to be posted to server side using signalR connection hub. Thus whenever you post any message after clicking the join group button, the message will appear to all the clients who has joined the group.
You can inject the IHubContext<T>
class into a service and call the clients using that.
public class NotifyService { private readonly IHubContext<ChatHub> _hub; public NotifyService(IHubContext<ChatHub> hub) { _hub = hub; } public Task SendNotificationAsync(string message) { return _hub.Clients.All.SendAsync("ReceiveMessage", message); } }
Now you can inject the NotifyService
into your class and send messages to all clients:
public class SomeClass { private readonly NotifyService _service; public SomeClass(NotifyService service) { _service = service; } public Task Send(string message) { return _service.SendNotificationAsync(message); } }
Simple inject the hubcontext into the class where you use the hubcontext.
Details you will find there:
Call SignalR Core Hub method from Controller
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With