【发布时间】:2013-07-27 10:27:17
【问题描述】:
我正在使用 SignalR 2,但我不知道如何使用我的 Hub 方法,例如从控制器操作内部。
我知道我可以做到以下几点:
var hub = GlobalHost.ConnectionManager.GetHubContext<T>();
hub.Clients.All.clientSideMethod(param);
但是直接在客户端执行方法。
如果我的服务器端 ClientSideMethod(param) 方法中有业务逻辑,我想从控制器调用与从客户端调用它时相同的方法怎么办?
目前我在集线器内使用public static void ClientSideMethod(param),在这种方法中,我使用ConnectionManager 中的IHubContext。
这样做有没有更好的办法?
以下内容不起作用(在 SignalR 2 中不再起作用?):
var hubManager = new DefaultHubManager(GlobalHost.DependencyResolver);
instance = hubManager.ResolveHub(typeof(T).Name) as T;
instance.ClientSideMethod(param);
访问客户端时出现“不支持通过 Hub 管道创建的 Hub”异常。
【问题讨论】:
-
为什么不从客户端执行,我假设是 JS,您可以执行 Ajax 请求并在控制器上执行您需要的操作
-
@MEYWD:因为例如我有一个管理界面,我想在“发生某些事情”时更新它。例如。客户端访问特定页面,因此我想从该页面触发控制器操作中的集线器方法。实际的客户并不关心这一点,那么他为什么要发布该消息?
-
我做过类似的事情,我有客户端和管理员(特殊客户端),管理员发送命令并等待客户端的响应,为此我制作了管理员列表和列表集线器上的客户端,管理员选择一个客户端,保留它以便没有其他管理员使用它,然后发送命令,集线器将其转发给客户端,客户端将响应返回给集线器,作为回报,集线器将转发给admin 并且响应打印在屏幕上
标签: asp.net asp.net-mvc signalr signalr-hub