gpt4 book ai didi

c# - 使用 IHubContext 实例化 SignalR Hub 对象

转载 作者:行者123 更新时间:2023-11-30 23:01:02 26 4
gpt4 key购买 nike

似乎 SignalR Hubs 的一大用途是向所有其他客户端显示一个客户端的操作。我希望使用 SignalR 的目的是当某个事件在我的服务器端代码中发生时,我想实例化一个集线器对象并调用其中一种方法来与所有客户端进行通信。如果您看到我以前的帖子 (Route To Take With SqlDependency OnChange),我想在 SqlDependency 的 OnChange 方法中执行此操作。经过研究,我发现有些人谈论使用 IHubContext 对象,但我还没有找到很多实例化和实际向客户端发送数据的示例。

这是否可能(如果可能的话,使用 IHubContext 向所有客户端发送数据可能是什么样子),如果不可能,是否有任何方法可以绕过像这样实例化集线器?

最佳答案

适用于 ASP.NET Core 的 SignalR

您可以创建一个具有 IHubContext<T> 的类注入(inject)。如果需要,注入(inject)其他依赖项,或者从 Controller 或其他类解析服务。

public class NotificationService
{
private readonly IHubContext<MyHub> _myHubContext;

public NotificationService(IHubContext<MyHub> myHubContext)
{
_myHubContext= myHubContext;
}

public async Task SendMessage(string message)
{
await _myHubContext.Clients.All.SendAsync("Update", message);
}
}

假设您使用的是 SqlDependency来自 IHostedService :

public class MyHostedService : IHostedService
{
public MyHostedService(
NotificationService notificationService)
{
// TODO get reference to sqlDependency
sqlDependency.OnChange += (s, e) => _notificationService.SendMessage(e.Info.ToString());
}
}

用于 ASP.NET 的 SignalR

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.sendMessage(message);

关于c# - 使用 IHubContext 实例化 SignalR Hub 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com