首页 文章

在ASP.NET Core SignalR中,如何从服务器向客户端发送消息?

提问于
浏览
1

我已经使用新发布的ASP.NET Core 2.1成功设置了SignalR服务器和客户端 . 我 Build 了一个聊天室,让我的 ChatHub 扩展 Hub :每当有来自客户端的消息时,服务器就会通过 Clients.Others 将其爆炸回来 .

我还不了解的是如何向客户端发送消息而不是作为对传入消息的响应 . 如果服务器正在工作并产生结果,如何获取对 Hub 的访问权以便向特定客户端发送消息? (或者我甚至需要访问 Hub ?还有其他方式发送消息吗?)

搜索此问题很困难,因为大多数结果来自旧版本的ASP.NET和SignalR .

3 回答

  • 1

    您可以将 IHubContext<T> 类注入服务并使用它调用客户端 .

    public class NotifyService
    {
        private readonly IHubContext<ChatHub> _hub;
    
        public NotifyService(IHubContext<ChatHub> hub)
        {
            _hub = hub;
        }
    
        public Task SendNotificationAsync(string message)
        {
            return _hub.Clients.All.InvokeAsync("ReceiveMessage", message);
        }
    }
    

    现在您可以将 NotifyService 注入您的类并向所有客户端发送消息:

    public class SomeClass
    {
        private readonly NotifyService _service;
    
        public SomeClass(NotifyService service)
        {
            _service = service;
        }
    
        public Task Send(string message)
        {
            return _service.SendNotificationAsync(message);
        }
    }
    
  • 0

    现在有SignalR HubContext的官方Microsoft文档可以回答你的问题https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1

    但是,正如其他人所指出的那样,您需要通过依赖注入获取IHubContext的实例,以访问集线器之外的集线器方法 .

  • 3

    Simple inject the hubcontext into the class where you use the hubcontext.

    您将在那里找到详细信息:

    Call SignalR Core Hub method from Controller

相关问题