Calling Signalr Hub Clients From Elsewhere In System
Solution 1:
This is the correct way for SignalR 2.x:
var context =GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(message);
Basically, you can use the dependency resolver for the current host to resolve the IConnectionManager
interface which allows you to get ahold of the context object for a hub.
Further information can be found in the official documentation.
Solution 2:
Hub.GetClients has disappeared in version 0.4.0.
From the wiki you can now use:
IConnectionManager connectionManager =AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
Solution 3:
You can easily use a hub by following this 2 step-
Instantiating by dependency injection like this-
publicclassClassName { ........ ........ private IHubContext _hub; publicBulletinSenderController(IConnectionManager connectionManager){ _hub = connectionManager.GetHubContext<McpHub>(); ........ ........ } ............ ............ }
2.Using the hub
object like this-
_hub.Clients.All.onBulletinSent(bulletinToSend);
More can be found here.
Example code can be found in this git repo.
Solution 4:
Have a look at how it's done in Chat.cs
in SignalR.Samples.Hubs.Chat
from https://github.com/SignalR/SignalR.
I can see in there that static Dictionary<TKey, TValue>
's are being instantiated at the top, so I imagine they are being maintained persistently too, either with the Chat
class being a persisted instance (?) or that array being updated somehow.
Check it out, David Fowler would probably be the best on this.
Solution 5:
This has changed in .NET Core 2, now you can use dependency injection like this:
privatereadonly IHubContext<MyHub,IMyHubInterface> _hubContext;
publicMyController(MyHub,IMyHubInterface hubContext)
{
_hubContext = hubContext;
}
publicboolSendViaSignalR()
{
_hubContext.Clients.All.MyClientSideSignalRMethod(new MyModel());
returntrue;
}
Post a Comment for "Calling Signalr Hub Clients From Elsewhere In System"