Asp.net-Mvc

從控制器的操作中呼叫集線器方法

  • June 30, 2013

如何從控制器的操作中呼叫集線器方法?這樣做的正確方法是什麼?

有人在文章中使用了這個:

DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("AdminHub") as AdminHub;
hub.SendMessage("woohoo");

但對我來說,這是拋出:

不支持使用不是由 HubPipeline 創建的 Hub 實例。

我還讀到您可以創建一個集線器上下文,但我不想對動作負責,也就是說,動作執行如下操作:

hubContext.Client(...).someJsMethod(..)

正確的方法是實際創建集線器上下文。如何以及在何處執行此操作取決於您,這裡有兩種方法:

  1. 在您的集線器中創建一個靜態方法(不必在您的集線器中,實際上可以在任何地方),然後您可以通過呼叫它AdminHub.SendMessage("wooo")
public static void SendMessage(string msg)
{
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
    hubContext.Clients.All.foo(msg);
}
  1. 完全避免使用靜態方法,直接發送到集線器客戶端
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
    hubContext.Clients.All.foo(msg);

引用自:https://stackoverflow.com/questions/17395201