我一直在尝试在数据库更新时在应用程序中触发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与代码或配置一起工作?非常感谢大家的关注。
1条答案
按热度按时间wh6knrhe1#
最后,我使用了与以前实现的管理器相同的中心名称,但使用了我自己的方法来解决这个问题。似乎我不能只是创建另一个集线器,我需要将其添加到可用/可用的列表中。