如何将 SignalR 连接到 Extjs 应用程序?

问题描述 投票:0回答:1

我一直在尝试让 signalR 在我的数据库更新时在我的应用程序中触发。 这是我尝试实现它的方式:

private const string SignalRJobStatusHubName = "jobControlHub";
private const string SignalRJobControlCreatedMethod = "jobControlCreated";
private const string SignalRJobControlUpdatedMethod = "jobControlUpdated";

private ISignalRService _signalRService;
private ISignalRService SignalRService => _signalRService ?? (_signalRService = ObjectFactory.CreateInstance<ISignalRService>());

然后当更新DB时,在Tryinsert方法的最后:

var inserted = DatabaseContext.Current.Execute(sql) > 0;

if (inserted)
{
    await SendSignalRMessageAsync(new ServerJobControlSignalDto(jobControl), SignalRJobControlCreatedMethod);
}

终于把它绑起来了:

private async Task<bool> SendSignalRMessageAsync(ServerJobControlSignalDto serverJobControlNotification, string method) =>
      await SignalRService.TenantBroadcastAsync(SignalRJobStatusHubName, new SignalNotification
      {
          Message = JsonConvert.SerializeObject(serverJobControlNotification),
          TargetMethod = method
      }, CurrentTenant.TenantId);

现在在我的 Extjs 中我有这个构造函数:

 constructor: function (grid) {
    var me = this;

    me.jobMonitoringGrid = grid;

    Comp.signaling.getHub('jobControlHub').then(function (jobControlHub) {
        me.jobControlHub = jobControlHub;
        me.jobCreatedHandler = me.onJobControlCreated.bind(me);
        me.jobUpdatedHandler = me.onJobControlUpdated.bind(me);

        jobControlHub.on('jobControlCreated', me.jobCreatedHandler);
        jobControlHub.on('jobControlUpdated', me.jobUpdatedHandler);
    });
},

然后我在同一个文件上有一些函数来更新商店和商店模型接收到的信号 (ServerJobControlSignalDto)。之后,我有一个网格,使用 DTO 中的一个值作为 dataIndex。如果您需要,我可以提供更多代码,但我现在尽量避免只发布无用的代码墙。 问题是当我更新数据库时网格没有任何价值。它为所有行返回 0。 我是 signalR 的新手,基本上是在我公司应用程序的另一页上为不同的数据库实体/管理器复制了一个实现。在该页面中,具有 99% 的相似代码,它工作正常并发送/接收数据库更新。我明白了 signalR 应该做什么。我尝试按照一些教程进行操作,并向我的公司询问一些说明,但负责实施此操作的人员已不在公司。 考虑到我从中复制的实体管理器实现工作得很好而我的不行,我通常还需要做些什么来使 signalR 与代码或配置一起工作吗? 非常感谢您的关注。

c# extjs signalr
1个回答
0
投票

我最终通过使用与之前实施的管理器相同的集线器名称来修复此问题,但使用了我自己的方法。 看来我不能只创建另一个集线器,我需要将它添加到可用/可用集线器列表中。

© www.soinside.com 2019 - 2024. All rights reserved.