我已经设置了一个 SignalR 集线器来在服务器和客户端之间进行通信。中心服务器端代码存储在一个名为 Hooking.cs 的类中。我想要的是能够调用 Hooking.cs 中定义的方法,以允许我从应用程序中的任何位置向任何连接的客户端广播消息。似乎为每个客户端/服务器调用创建了一个新的 Hooking.cs 实例,所以我希望我能够使用类似
var hooking = new Hooking();
hooking.Test();
使用 Hooking.cs 中定义的方法 Test(),例如
public static void Test() {
Clients.test()
}
和客户端javascript
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
不幸的是,它并没有那么简单,因为 Clients 不是静态的,所以不能通过静态方法访问。
通过查看 SignalR 源代码,我发现了一个看起来很有前途的方法,Hubs.Invoke(string hubName, string method, params object[] args)
,所以我希望我可以使用一些东西例如 Hubs.Invoke("Hooking", "Test")
但我无法让它工作。
如有任何帮助,我们将不胜感激
最佳答案
这是 SignalR 2.x 的正确方法:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(message);
基本上,您可以使用当前主机的依赖项解析器来解析 IConnectionManager
接口(interface),它允许您获取集线器的上下文对象。
更多信息可以在 official documentation 中找到.
关于c# - 从系统中的其他地方调用 SignalR hub 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7634255/