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

时间:2012-12-22 13:11:26

标签: signalr

SignalR wiki涵盖了如何通过集线器外部的集线器进行广播。但是,这会调用客户端操作:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.Group(group).addMessage(message);

有没有办法调用集线器操作,理想情况下是强类型的? e.g。

GetHubContext<MyHub>().Invoke(h => h.Say(message))

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

3 个答案:

答案 0 :(得分:5)

有点迟到了,但是,是的,有。

stockticker sample nuget package执行此操作(虽然它并未完全使用它!):

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

在样本中,模式是:

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;
        }
    }

...

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

StockTicker.Instance.OpenMarket();

asp.net site

上的博客文章也涵盖了相同的示例

答案 1 :(得分:1)

不。这就像试图从服务器端调用MVC控制器(你只是不这样做)。只需将公共逻辑移动到共享帮助程序中,然后从集线器和其他服务器端代码调用该帮助程序。

答案 2 :(得分:0)

看看: https://github.com/i-e-b/SignalR-TypeSafeClient

你可以使用这个库。

TIZ