首页 > 后端开发 > C++ > 如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?

如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?

DDD
发布: 2025-01-05 13:47:41
原创
739 人浏览过

How to Call SignalR Core Hub Methods from an ASP.NET Core Controller?

从 Asp.Net Core 控制器调用 SignalR Core Hub 方法

在本文中,我们将探讨如何调用 SignalR Core Hub 方法来自 ASP.NET Core 控制器内。此功能允许服务器端与连接的客户端通信以广播事件或更新实时数据。

问题概述

在提供的场景中,ASP.NET任务完成后,核心应用程序接收来自 Windows 服务的请求。任务是通知所有连接的 SignalR Core 客户端有关此事件的信息。但是,Windows 服务无法直接与 SignalR 建立连接。

解决方案 1:将 HubContext 注入到 Controller

一种方法是将适当的 HubContext 注入到控制器类中。这使得可以从控制器的操作方法直接调用集线器方法。

[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        await this.HubContext.Clients.All.InvokeAsync("Completed", id);
        return new JsonResult(true);
    }

    private IHubContext<VarDesignHub> HubContext
    {
        get; set;
    }
}
登录后复制

此方法允许与所有连接的客户端直接通信,但可能会产生性能影响,具体取决于客户端的数量。

解决方案 2:类型化集线器和客户端接口

另一种方法涉及定义类型化客户端接口和从具有类型化客户端接口的相应集线器继承。这使得可以将类型化的 HubContext 注入到控制器中以进行特定的方法调用。

类型化客户端接口:

public interface ITypedHubClient
{
    Task BroadcastMessage(string name, string message);
}
登录后复制

Hub 继承自类型化客户端接口:

public class ChatHub : Hub<ITypedHubClient>
{
    public void Send(string name, string message)
    {
        Clients.All.BroadcastMessage(name, message);
    }
}
登录后复制

控制器注入和方法调用:

[Route("api/demo")]
public class DemoController : Controller
{
    IHubContext<ChatHub, ITypedHubClient> _chatHubContext;

    public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext)
    {
        _chatHubContext = chatHubContext;
    }

    [HttpGet]
    public IEnumerable<string> Get()
    {
        _chatHubContext.Clients.All.BroadcastMessage("test", "test");
        return new string[] { "value1", "value2" };
    }
}
登录后复制

这种方法可以与客户进行更有针对性、更高效的沟通。

以上是如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板