【问题标题】:Instantiate SignalR Hub Object With IHubContext使用 IHubContext 实例化 SignalR Hub 对象
【发布时间】:2018-07-10 23:22:04
【问题描述】:

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

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

【问题讨论】:

  • 你在使用 ASP.NET Core 吗?
  • 感谢您的回复。所以澄清一下,如果我的应用程序不是 ASP.NET 核心,那么 SignalR 就不能满足我的目的?
  • 您仍然可以使用它 - 代码不同。

标签: c# asp.net signalr signalr-hub sqldependency


【解决方案1】:

用于 ASP.NET Core 的 SignalR

您可以创建一个注入了IHubContext<T> 的类。如果需要,可以注入其他依赖项,或者从控制器或其他类解析服务。

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);
    }      
}

假设您使用的是来自IHostedServiceSqlDependency

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);

【讨论】:

  • 很高兴您正在使用 HostedServices,但您应该添加免责声明,这仅适用于 .Net-Core,并且无法保证 HostedService 将运行完成,
【解决方案2】:

您需要使用 Microsoft.AspNet.SignalR 库。

using Microsoft.AspNet.SignalR;

//Instantiating. SignalRHub is the hub name. var context = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>(); //sends message context.Clients.Client(ClientId).sendMessage(data);

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2020-07-01
    • 2015-06-21
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多