SignalR wiki涵盖了如何通过集线器外部的集线器进行广播。但是,这会调用客户端操作:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.Group(group).addMessage(message);
有没有办法调用集线器操作,理想情况下是强类型的? e.g。
GetHubContext<MyHub>().Invoke(h => h.Say(message))
我知道通过使用.NET客户端连接到集线器可以实现这一点,但是当调用代码与集线器位于同一服务器上时,这似乎是错误的。
答案 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();
上的博客文章也涵盖了相同的示例
答案 1 :(得分:1)
不。这就像试图从服务器端调用MVC控制器(你只是不这样做)。只需将公共逻辑移动到共享帮助程序中,然后从集线器和其他服务器端代码调用该帮助程序。
答案 2 :(得分:0)