• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETCoreSignalR(五):从一个中心(hub)之外发送消息

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
此为系列文章,对MSDN ASP.NET Core SignalR 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解。    

        SignalR 中心 是核心抽象,其负责发送消息给连接到SignalR中心的客户端。从你的程序的其他地方使用IHubContext 服务来发送消息也是可能的。这篇文章解释了如何访问一个 IHubContext 对象来从一个 中心 外面来发送通知。

获取一个IHubContext实例

       在ASP.NET Core SignalR 中,你可以通过依赖注入来访问一个IHubContext的实例。你也可以将IHubContext的实例注入到控制器,中间件,或者其他DI服务中。然后使用这个实例来向客户端发送消息。

       注意,这不同于ASP.NET 4.x SignalR,其使用IHubContext 来提供对于 IHubContext 的访问。ASP.NET Core具有一个依赖注入框架,其移除了对于这个全局单例的需要。

在控制器中注入一个IHubContext的实例

        你可以通过把一个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();
}

在中间件中获取一个IHubContext的实例

       在一个中间件中像这样访问 IHubContext:

app.Use(async (context, next) =>
{
    var hubContext = context.RequestServices
                            .GetRequiredService<IHubContext<MyHub>>();
    //...
});

      当中心 方法被从 Hub类外面被调用,那么便没有调用者与此调用有关。因此,也没有办法访问ConnectionId,Caller以及Others 属性。

注入一个强类型的HubContext

      为了注入一个强类型的HubContext,请确保你的 Hub 继承自 Hub<T>。使用接口 IHubContext<THub, T> 注入它 而不是使用IHubContext<THub>。

public class ChatController : Controller
{
    public IHubContext<ChatHub, IChatClient> _strongChatHubContext { get; }

    public ChatController(IHubContext<ChatHub, IChatClient> chatHubContext)
    {
        _strongChatHubContext = chatHubContext;
    }

    public async Task SendMessage(string message)
    {
        await _strongChatHubContext.Clients.All.ReceiveMessage(message);
    }
}

相关资源  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何在asp.net的mvc类型项目中添加webservice发布时间:2022-07-10
下一篇:
ASP.NETMVC(三)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap