我已经使用新发布的 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/