Skip to content Skip to sidebar Skip to footer

Calling Signalr Hub Clients From Elsewhere In System

I've set up a SignalR hub to communicate between the server and client. The hub server side code is stored in a class called Hooking.cs. What I want is to be able to call a method

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-

  1. 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"