从Controller调用SignalR Core Hub方法

如何从Controller调用SignalR Core Hub方法?

我将ASP.NET Core 2.0与Microsoft.AspNetCore.SignalR(1.0.0-alpha2-final)一起使用。


我有与Excel,SolidEdge和Excel通信的Windows服务...完成操作后,它将请求发布到ASP.NET Core应用程序中的控制器。现在,我需要通知所有与SignalR连接到服务器的客户端,外部程序已完成某些任务。

我无法更改窗口服务的工作方式。(无法从窗口服务连接到SignalR)。

我找到了许多适用于旧SignalR(GlobalHost.ConnectionManager.GetHubContext)的解决方案,但发生了很大变化,这些解决方案不再起作用。


我的控制器:


[Route("API/vardesigncomm")]

public class VarDesignCommController : Controller

{

    [HttpPut("ProcessVarDesignCommResponse/{id}")]

    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)

    {

        //call method TaskCompleted in Hub !!!! How?


        return new JsonResult(true);

    }

}

我的中心:


public class VarDesignHub : Hub

{

    public async Task TaskCompleted(int id)

    {

        await Clients.All.InvokeAsync("Completed", id);

    }

}


繁华开满天机
浏览 1814回答 3
3回答

米琪卡哇伊

现在这里有充分的证明您可以将IHubContext实例添加到控制器中,方法是将其添加到构造函数中:public class HomeController : Controller{&nbsp; &nbsp; private readonly IHubContext<NotificationHub> _hubContext;&nbsp; &nbsp; public HomeController(IHubContext<NotificationHub> hubContext)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _hubContext = hubContext;&nbsp; &nbsp; }}现在,通过访问IHubContext实例,您可以像调用集线器本身一样调用集线器方法。public async Task<IActionResult> Index(){&nbsp; &nbsp; await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");&nbsp; &nbsp; return View();}
打开App,查看更多内容
随时随地看视频慕课网APP