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获取中心上下文。