c# - 在 ASP.NET Core SignalR 中,如何将消息从服​​务器发送到客户端?

标签 c# asp.net-core asp.net-core-signalr

我已经使用新发布的 ASP.NET Core 2.1 成功设置了 SignalR 服务器和客户端。我通过制作 ChatHub 建立了一个聊天室扩展 Hub : 无论何时从客户端收到消息,服务器都会通过 Clients.Others 将其发送出去.

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

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

最佳答案

您可以注入(inject) 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.SendAsync("ReceiveMessage", message);
    }
}

现在你可以注入(inject) NotifyService进入你的类(class)并向所有客户发送消息:

public class SomeClass
{
    private readonly NotifyService _service;

    public SomeClass(NotifyService service)
    {
        _service = service;
    }

    public Task Send(string message)
    {
        return _service.SendNotificationAsync(message);
    }
}

关于c# - 在 ASP.NET Core SignalR 中,如何将消息从服​​务器发送到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50788100/

相关文章:

c# - 使用反射调用属性的方法

c# - 使用 async/await 的异步 TcpListener 的正确方法

c# - 发送至 iOS 的 PushSharp 通知未到达设备

asp.net-core - 为自定义类型创建自定义模型绑定(bind)器

SignalR 核心控制台客户端未收到通知

c# - 不使用扩展方法选择 XML 元素

c# - 在 Asp.Net Core 上为 MongoDB ObjectId 创建一个 ModelBinder

c# - 使用 LINQ select 返回异步任务

angular - SignalRCore - 无法获取更新的数据。 - 使用定时器管理器

.net-core-3.0 - WebJob .Net Core 3 的 Azure SignalR 绑定(bind)不起作用