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

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

Susan Sarandon
发布: 2025-01-05 03:32:39
原创
862 人浏览过

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

从 Controller 调用 SignalR Core Hub 方法

SignalR Core 为 ASP.NET Core 应用程序提供了强大的实时通信机制。本文解决了从控制器调用 SignalR 集线器方法的常见场景。

提供的示例演示了需要在完成从 Windows 服务启动的外部操作时通知连接的客户端。由于该服务无法直接与 SignalR 交互,因此我们探索了两种潜在的解决方案。

解决方案 1:使用 IHubContext

将所需集线器的 IHubContext 注入控制器:

public class VarDesignCommController : Controller
{
    public VarDesignCommController(IHubContext<VarDesignHub> hubcontext)
    {
        HubContext = hubcontext;
    }
    ...
}
登录后复制

然后调用 hub 方法:

await this.HubContext.Clients.All.InvokeAsync("Completed", id);
登录后复制

解决方案 2:使用 Typed Hubs

为了更精细的控制,创建一个类型化的客户端接口:

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);
    }
}
登录后复制

Inject类型化的集线器上下文并调用方法:

// In VarDesignCommController
[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 Hub 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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