Signalr 获取信号机中的当前集线器
从控制器调用SignalrHub中的方法有好方法吗 现在我有这个:Signalr 获取信号机中的当前集线器,signalr,Signalr,从控制器调用SignalrHub中的方法有好方法吗 现在我有这个: public class StatsHub : Hub { private static readonly Lazy<StatsHub> instance = new Lazy<StatsHub>(() => new StatsHub()); public static StatsHub Instance { get { return instance.Value; } }
public class StatsHub : Hub
{
private static readonly Lazy<StatsHub> instance = new Lazy<StatsHub>(() => new StatsHub());
public static StatsHub Instance { get { return instance.Value; } }
public StatsHub()
{
if (this.Clients == null)
{
var hubContext = SignalR.GlobalHost.ConnectionManager.GetHubContext<StatsHub>();
this.Clients = hubContext.Clients;
this.Groups = hubContext.Groups;
}
}
// methods here...
}
除了hubContext没有Hub的调用者或上下文属性之外,它几乎是好的,这很好
希望有更好的方法做到这一点?找到了DefaultHubManager,我想这正是我需要的
DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("AdminHub") as AdminHub;
hub.SendMessage("woohoo");
工作。如果有更好的/首选的方法-请共享。如果您想从中心外部通过中心广播,您需要
GlobalHost.ConnectionManager.GetHubContext()
获取中心上下文。然后,您可以使用此上下文通过.Clients
属性进行广播
正如您的示例代码中所指出的,您已经掌握了中心上下文,但在我看来,在中心内部这样做是不对的。如果您仅在控制器操作中使用SendMessage()
中的逻辑,我会将代码移到控制器操作中,并使用从那里通过GetHubContext()
获得的中心上下文
请注意,在这种情况下,
调用者
或上下文
属性将始终为null
,因为在向服务器发出请求时,SignalR没有参与,因此无法提供属性。这不再有效(在SignalR 2中?)。请参阅。DefaultHubManager
存在于SignalR 2.x中,但是hub.Context
为空,因此所有操作都会失败。这在SignalR 2.0中起作用,但我使用的hub实例异常不是由hubbipline创建的,因此不受支持
DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("AdminHub") as AdminHub;
hub.SendMessage("woohoo");