为了账号安全,请及时绑定邮箱和手机立即绑定

从Controller调用SignalR Core Hub方法

从Controller调用SignalR Core Hub方法

繁华开满天机 2019-10-11 11:17:04
如何从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);    }}
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

现在这里有充分的证明


您可以将IHubContext实例添加到控制器中,方法是将其添加到构造函数中:


public class HomeController : Controller

{

    private readonly IHubContext<NotificationHub> _hubContext;


    public HomeController(IHubContext<NotificationHub> hubContext)

    {

        _hubContext = hubContext;

    }

}

现在,通过访问IHubContext实例,您可以像调用集线器本身一样调用集线器方法。


public async Task<IActionResult> Index()

{

    await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");

    return View();

}


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 1870 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信