簡體   English   中英

ASP.NET MVC中使用SignalR Hub和Controller類的正確方法

[英]correct approach with SignalR Hub and Controller class in ASP.NET MVC

我嘗試將收到的數據從Web服務調用發送到我的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);

您永遠不要實例化與當前執行上下文分離的Controller,而小的例外是作為單元測試的一部分進行模擬。

構造如下:

var data = new MyController().getData(_Ids);

最好避免。 如果從兩者中決定,最好從控制器中獲取集線器上下文。

但是,您的示例是不完整的,因為您沒有顯示getData(_Ids)方法內部的內容,而是說您是從Web服務中獲取數據的?

也許您可以將檢索邏輯即getData(_Ids)封裝在集線器本身內的receiveData()中,或者如果要在更多地方調用此服務,則還可以定義一個靜態適配器幫助程序類,該類將包裝對Web的調用服務,此適配器以后可以在集線器的receiveData()方法中使用。

請注意,根據您所編寫的應用程序,其范圍和功能的不同,最好使用一些依賴注入框架(例如Autofac或Ninject),然后僅通過構造函數將IConnectionManager注入Controller中,而不是在方法中實例化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM