从服务器向所有客户端发送signalr消息

Mat*_*rts 6 c# asp.net-mvc signalr

这与SignalR +通过动作方法向Hub发布消息有关,但我的问题有点不同:

我使用的是信号器版本0.5.2,使用集线器.在旧版本中,我们鼓励您在集线器上创建方法以向所有客户端发送消息,这就是我所拥有的:

public class MyHub : Hub
{
    public void SendMessage(string message)
    {
        // Any other logic here
        Clients.messageRecieved(message);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

所以在0.5.2中,我想向所有客户端发送消息(比如从控制器的某个地方发送消息).如何访问MyHub实例?

我看到引用的唯一方法是:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.messageRecieved("hello");
Run Code Online (Sandbox Code Playgroud)

这很好,但我想在我的集线器上调用该方法.

Pau*_*aul 20

您可以使用静态方法执行此操作:

SignalR v.04-

public class MyHub : Hub
{
    internal static void SendMessage(string message)
    {
        var connectionManager = (IConnectionManager)AspNetHost.DependencyResolver.GetService(typeof(IConnectionManager));
        dynamic allClients = connectionManager.GetClients<MyHub>();
        allClients.messageRecieved(message);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

SignalR 0.5+

public class MyHub : Hub
{
    internal static void SendMessage(string message)
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        context.Clients.messageRecieved(message);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

然后您可以这样调用:

MyHub.SendMessage("The Message!");
Run Code Online (Sandbox Code Playgroud)

关于SignalR API的好文章:http://weblogs.asp.net/davidfowler/archive/2012/05/04/api-improvements-made-in-signalr-0-5.aspx

由Paolo Moretti在评论中提供