SignalR wiki涵盖如何从集线器外部通过集线器进行广播。但是,这会调用客户端操作:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.Group(group).addMessage(message);
有没有办法调用集线器操作,最好以强类型的方式?例如
GetHubContext<MyHub>().Invoke(h => h.Say(message))
我知道可以通过使用 .NET 客户端连接到集线器来实现这一点,但是当调用代码与集线器位于同一服务器上时,这似乎是错误的。
最佳答案
聚会有点晚了,但是,是的,有。
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 上的一篇博客文章也介绍了相同的示例。
关于signalr - 如何从服务器调用 SignalR 集线器操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003111/