如何从服务器调用SignalR集线器操作

Ben*_*ter 3 signalr

SignalR维基介绍了如何在广播从中心外的枢纽.但是,这会调用客户端操作:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.Group(group).addMessage(message);
Run Code Online (Sandbox Code Playgroud)

有没有办法调用Hub操作,理想情况是以强类型方式?例如

GetHubContext<MyHub>().Invoke(h => h.Say(message))
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过使用.NET客户端连接到集线器,但是当调用代码与集线器在同一服务器上时,这似乎是错误的.

Jon*_*ton 5

派对迟到但是,是的,有.

stockticker样本NuGet包 做到这一点(尽管它并不完全使用它!):

基本上,您公开服务器端集线器的静态实例以进行调用.

在样本中,模式是:

public class StockTicker
{
    // Singleton instance
    private readonly static Lazy<StockTicker> _instance = new Lazy<StockTicker>(
        () => new StockTicker(GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>().Clients));

...


    public static StockTicker Instance
    {
        get
        {
            return _instance.Value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

...

然后可以从任何地方调用它,几乎任何时候!:

StockTicker.Instance.OpenMarket();
Run Code Online (Sandbox Code Playgroud)

asp.net网站上的博客文章也涵盖了同样的例子