C# 信号器-当至少一个客户端正在侦听时,从数据库中提取数据
各位信号员专家您好 我需要创建一个实时仪表板来显示从数据库中提取的数据图表。即使没有客户端在侦听,它也会在站点启动后立即从服务器端提取数据 Startup.cs代码C# 信号器-当至少一个客户端正在侦听时,从数据库中提取数据,c#,asp.net,asp.net-mvc,signalr,C#,Asp.net,Asp.net Mvc,Signalr,各位信号员专家您好 我需要创建一个实时仪表板来显示从数据库中提取的数据图表。即使没有客户端在侦听,它也会在站点启动后立即从服务器端提取数据 Startup.cs代码 public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); var hubConfiguration = new HubConfiguration();
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableDetailedErrors = true;
app.MapSignalR();
//is this the right place for this code
DashboardService dashboardService = new DashboardService(10000); //10 second
Task.Factory.StartNew(async () => await dashboardService.GetDataFromDatabase());
}
}
仪表板服务.cs
public class DashboardService
{
private IHubContext _hubs;
private readonly int _pollIntervalMillis;
public DashboardService(int pollIntervalInMilliSec)
{
_hubs = GlobalHost.ConnectionManager.GetHubContext<DashboardHub>();
_pollIntervalMillis = pollIntervalInMilliSec;
}
public async Task GetDataFromDatabase()
{
while (true)
{
await Task.Delay(_pollIntervalMillis);
//Data Logic to pull data from database
_hubs.Clients.All.broadcastToDashboard(broadcastObject);
}
}
}
公共类仪表板服务
{
私人IHubContext_中心;
私人只读int_pollIntervalMillis;
公共仪表板服务(int pollIntervalInMilliSec)
{
_hubs=GlobalHost.ConnectionManager.GetHubContext();
_pollIntervalMillis=pollIntervalInMilliSec;
}
公共异步任务GetDataFromDatabase()
{
while(true)
{
等待任务延迟(_pollIntervalMillis);
//从数据库中提取数据的数据逻辑
_hubs.Clients.All.broadcastToDashboard(broadcastObject);
}
}
}
我不希望即使没有客户机在侦听也从数据库中提取数据,而是希望仅当至少有一个客户机在侦听时才从数据库中提取数据,如果没有客户机在侦听,则停止提取数据。这可能吗?任何建议都可以作为参考
然后在提取仪表板数据之前,先检查
UserHandler.ConnectedIds.Any()
第一次连接后,是否可以使用OnConnect
和锁定机制来运行它?