Signalr GlobalHost.ConnectionManager.GetHubContext&;客户,其他人
我似乎在打电话时遇到了问题:Signalr GlobalHost.ConnectionManager.GetHubContext&;客户,其他人,signalr,Signalr,我似乎在打电话时遇到了问题: Clients.Others.SomeJavascriptFunction; 当我使用 GlobalHost.ConnectionManager.GetHubContext("MyHub"); 我似乎只能让它在一个中心内工作。 有人能解释一下吗 问候 迈克 更新 在大卫的评论之后 我发现我可以做到以下几点: public class MyHub1 : Hub { public static HubConnectionContext MyP
Clients.Others.SomeJavascriptFunction;
当我使用
GlobalHost.ConnectionManager.GetHubContext("MyHub");
我似乎只能让它在一个中心内工作。
有人能解释一下吗
问候
迈克
更新
在大卫的评论之后
我发现我可以做到以下几点:
public class MyHub1 : Hub
{
public static HubConnectionContext MyProperty { get; set; }
public void Start()
{
MyProperty = Clients;
}
}
然后在我的js中调用Start
$.connection.hub.start().done(function () {
sig.server.start();
});
然后允许我从api控制器调用函数
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
var changes = _contextProvider.SaveChanges(saveBundle);
var stuff = MyHub1.MyProperty;
stuff.Others.refreshToDos();
return changes;
}
也许是一个完整的黑客,但似乎工作
有人看到这有什么问题吗?只有当您有要排除的连接id时,其他人才有意义。其他是Clients.AllExcept(Context.ConnectionId)的简写。当您在集线器之外时,没有当前连接id,因此无法使用其他连接id
您需要将连接id从客户端传递到要用于执行AllExcept的API。谢谢David,我已经更新了我的问题。你看到我所做的有问题吗?是的,一切都有问题。您正在静态捕获一个实例属性,这样集线器实例就永远不会消亡。永远不要做这样的事。相反,按照我说的做,将连接id从客户端传递到您的方法,并使用GlobalHost获取中心上下文。