在 ASP.NET Core SignalR 中,如何将消息从服务器发送到客户端?
In ASP.NET Core SignalR, how do I send a message from the server to a client?
我已经使用新发布的 ASP.NET Core 2.1 成功设置了 SignalR 服务器和客户端。我通过 ChatHub
扩展 Hub
建立了一个聊天室:无论何时从客户端收到一条消息,服务器都会通过 Clients.Others
.
将其传回
我还不明白如何向客户发送消息而不是作为对传入消息的响应。如果服务器正在工作并产生结果,我如何获得对 Hub
的访问权限以便向特定客户端发送消息? (或者我什至需要访问 Hub
吗?还有其他发送消息的方法吗?)
搜索此问题很困难,因为大多数结果来自旧版本的 ASP.NET 和 SignalR。
您可以将 IHubContext<T>
class 注入服务并使用它调用客户端。
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);
}
}
现在您可以将 NotifyService
注入您的 class 并向所有客户端发送消息:
public class SomeClass
{
private readonly NotifyService _service;
public SomeClass(NotifyService service)
{
_service = service;
}
public Task Send(string message)
{
return _service.SendNotificationAsync(message);
}
}
简单地将 hubcontext 注入您使用 hubcontext 的 class。
您将在那里找到详细信息:
现在有 SignalR HubContext 的官方 Microsoft 文档可以回答您的问题
https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1
但是,是的,正如其他人指出的那样,您需要通过依赖项注入获取 IHubContext 的实例,以访问集线器外部的集线器方法。
我已经使用新发布的 ASP.NET Core 2.1 成功设置了 SignalR 服务器和客户端。我通过 ChatHub
扩展 Hub
建立了一个聊天室:无论何时从客户端收到一条消息,服务器都会通过 Clients.Others
.
我还不明白如何向客户发送消息而不是作为对传入消息的响应。如果服务器正在工作并产生结果,我如何获得对 Hub
的访问权限以便向特定客户端发送消息? (或者我什至需要访问 Hub
吗?还有其他发送消息的方法吗?)
搜索此问题很困难,因为大多数结果来自旧版本的 ASP.NET 和 SignalR。
您可以将 IHubContext<T>
class 注入服务并使用它调用客户端。
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);
}
}
现在您可以将 NotifyService
注入您的 class 并向所有客户端发送消息:
public class SomeClass
{
private readonly NotifyService _service;
public SomeClass(NotifyService service)
{
_service = service;
}
public Task Send(string message)
{
return _service.SendNotificationAsync(message);
}
}
简单地将 hubcontext 注入您使用 hubcontext 的 class。
您将在那里找到详细信息:
现在有 SignalR HubContext 的官方 Microsoft 文档可以回答您的问题 https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1
但是,是的,正如其他人指出的那样,您需要通过依赖项注入获取 IHubContext 的实例,以访问集线器外部的集线器方法。