我尝试将收到的数据从webservice调用发送到我的javascript客户端。 什么是正确的方法?我应该在Controller类中创建hubContext
//Controller
var data = this.getData(_Ids);
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubs.MyHub>();
hubContext.Clients.Client(cc.ConnectionId).receiveData(data);
以这种方式发送收到的数据。 或者我应该在Hub类中创建一个控制器来获取数据并将其发送到Hub
//SignalR Hub
var data = new MyController().getData(_Ids);
Clients.Client(cpm.ConnectionId).receiveData(data);
答案 0 :(得分:0)
你永远不应该实例化一个与当前执行上下文分离的Controller,其中一个小例外是作为单元测试的一部分进行模拟。
构造如:
var data = new MyController().getData(_Ids);
最好避免。如果从两者中决定它更好从控制器获取集线器上下文。
但是你的例子不完整,因为你没有在getData(_Ids)方法中显示什么,你说你从网络服务中获取数据?
也许您可以在Hub本身内的receiveData()中封装检索逻辑,即getData(_Ids),或者如果您在更多地方调用此服务,您还可以定义一个静态适配器帮助程序类,它将包围调用到Web服务,此适配器以后可以在集线器的receiveData()方法中使用。
请注意,根据您的编写应用程序,其范围和功能,使用一些依赖注入框架(如Autofac或Ninject)可能是一个好主意,只需通过构造函数将IConnectionManager注入Controller,而不是在方法中实例化它。