信号RCore - 无法获取更新的数据. - 使用计时器管理器



我正在学习如何实现信号器。我参考了一个教程链接,并在没有数据库连接的情况下创建了示例应用程序,该应用程序运行良好。

Tech - SinalRCore,Entityframework Core,Dontnet Core API,Angular 8

在没有数据库连接的情况下,SingalR能够更新我发送到angular的数据。我可以看到更改的数据没有任何问题。

当我尝试从数据库中获取数据时,我正在获取数据,但是当我在数据库中进行更新时,更新不会反映在我得到的结果 json 中。

我正在使用一个空的集线器。 使用每 2 秒触发一次的计时器。

这是我的 API 操作。

namespace MyUtilities.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AlertsController : ControllerBase
{
private IHubContext<AlertHub> _hub;
private readonly FolderContext  dbContext;
public AlertsController(IHubContext<AlertHub> hub,FolderContext Context )
{
_hub = hub;
dbContext= Context;
}
public IActionResult Get()
{
var res = dbContext.Folder.Join(dbContext.FilterCount,
f => f.lFolderId,
e => e.lFolderId,
(f, e) => new
{
lFolderId = f.lFolderId,
sTileName = f.sMnemonic,
Icon = f.sIcon,
Count = e.lNewCount
})
.GroupBy(f => new { f.sTileName, f.Icon, f.lFolderId }).Select(x => new { Count = x.Sum(f => f.Count), x.Key.lFolderId, x.Key.Icon, x.Key.sTileName }).ToList();
var timerManager = new TimerManager(() => _hub.Clients.All.SendAsync("transferalertdata", res));

return Ok(new { Message = "Request Completed" });
}
}
}

以上述方式使用上下文是否有任何问题?

当我尝试从数据库中获取数据时,我正在获取数据,但是当我在数据库中进行更新时,更新不会反映在我得到的结果 json 中。

var timerManager = new TimerManager(() => _hub.Clients.All.SendAsync("transferalertdata", res));

在您的AlertsController中,我们可以发现您只检索一次数据,当它到达Get操作时,您将其分配给变量res,然后在TimerManager回调函数中,您只需将检索到的/旧数据发送到所有连接的 SignalR 客户端,而不是再次从数据库中获取更新的数据,因此连接的 SignalR 客户端只是接收旧数据,即使您提供的回调函数每两个执行一次秒。

此外,如果在回调函数(或定时任务(的代码逻辑中执行数据库查询,请注意它会频繁执行(每两秒一次(,这可能会对您的数据库服务器造成不良影响。因此,如果可能,仅当某些用户对数据库执行更新操作时,才可以尝试调用/触发"SignalR BroadCast"功能。

最新更新