3

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

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

有没有办法调用Hub Operation,最好是以强类型的方式?例如

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

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

4

3 回答 3

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

...

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

StockTicker.Instance.OpenMarket();

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

于 2014-01-21T15:29:01.077 回答
1

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

于 2012-12-22T16:43:33.247 回答
0

看看: https ://github.com/ieb/SignalR-TypeSafeClient

你可以使用这个库。

蒂兹

于 2014-08-30T10:46:42.147 回答