Jor*_*ork 72 javascript c# asp.net-mvc signalr signalr-hub
我已经建立了一个SignalR集线器来在服务器和客户端之间进行通信.中心服务器端代码存储在名为Hooking.cs的类中.我想要的是能够调用Hooking.cs中定义的方法,允许我从应用程序的任何地方向任何连接的客户端广播消息.似乎为每个客户端/服务器调用创建了一个新的Hooking.cs实例,所以我希望我能够使用像
var hooking = new Hooking();
hooking.Test();
Run Code Online (Sandbox Code Playgroud)
用Hooking.cs中定义的方法Test()如
public static void Test() {
Clients.test()
}
Run Code Online (Sandbox Code Playgroud)
并与客户端javascript
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
Run Code Online (Sandbox Code Playgroud)
不幸的是,它并不那么简单,因为客户端不是静态的,因此无法从静态方法访问.
通过SignalR源代码,我遇到了一个看起来很有前景的方法Hubs.Invoke(string hubName, string method, params object[] args),所以我希望我可以使用类似的东西,Hubs.Invoke("Hooking", "Test")但是我无法使它工作.
任何有关这方面的帮助将非常感激
Pao*_*tti 110
这是SignalR 2.x的正确方法:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(message);
Run Code Online (Sandbox Code Playgroud)
基本上,您可以使用当前主机的依赖项解析程序来解析IConnectionManager允许您获取集线器上下文对象的接口.
更多信息可以在官方文档中找到.
Gre*_*nis 23
Hub.GetClients已在版本0.4.0中消失.
从维基中,您现在可以使用:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
Run Code Online (Sandbox Code Playgroud)
您可以通过以下两步轻松使用集线器 -
像这样依赖注入实例化 -
public class ClassName
{
........
........
private IHubContext _hub;
public BulletinSenderController(IConnectionManager connectionManager)
{
_hub = connectionManager.GetHubContext<McpHub>();
........
........
}
............
............
}
Run Code Online (Sandbox Code Playgroud)2.使用hub这样的物体 -
_hub.Clients.All.onBulletinSent(bulletinToSend);
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到.
示例代码可以在这个git repo中找到.
| 归档时间: |
|
| 查看次数: |
61941 次 |
| 最近记录: |