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

ua4mk5z4  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(147)

我一直在尝试在数据库更新时在应用程序中触发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的新手,基本上是在我公司应用程序的另一个页面上复制了一个实现,用于不同的DB实体/管理器。在该页面中,99%的代码相似,它运行良好,并发送/接收数据库更新。我明白了signalR应该做什么。我试着遵循一些教程,并询问我的公司周围的一些澄清,但负责实施这一点的人已经不在公司了。考虑到我复制的实体管理器实现工作得很好,而我的却不行,我通常还需要做什么来使signalR与代码或配置一起工作?非常感谢大家的关注。

wh6knrhe

wh6knrhe1#

最后,我使用了与以前实现的管理器相同的中心名称,但使用了我自己的方法来解决这个问题。似乎我不能只是创建另一个集线器,我需要将其添加到可用/可用的列表中。

相关问题