我有一个Azure表存储,可以从Web服务中插入数据。
我的应用程序(ASP.Net MVC,VS 2017)已实现SignalR,以从Azure表存储接收任何已更改的数据。
我的问题
新数据到达表存储后,只有刷新浏览器时,最新数据才会自动反映在任何其他已打开的浏览器中 - 无论是在相同还是不同的计算机系统中。它不会自动显示更改后的值在新数据进入表存储后,在任何打开的浏览器中。 我想这可能是因为当我刷新浏览器时,根据我的代码,它从Table和SignalR中获取数据以将数据发送到其他客户端。
因此,每当有新数据到达时,从表中发送通知存在差距。
我的查询
我在这里缺少的是什么 - 它没有自动在浏览器上显示最新数据?
或者,Table Storage没有任何通知机制来通知新数据到达? 如果是这样,应该在新数据何时到达Azure表存储时接收通知?
我的行动方法
[HttpGet]
public ActionResult Index()
{
var model = SignalRepository.LatestSignalCollection();// Connects with Azure to fetch the latest 5 records
return View(model);
}
我的SignalR Hub代码
public SignalHub()
{
SignalRepository.SignalSubscriber();
var signalData = SignalRepository.LatestSignalCollection(); //LatestSignalCollection() ===> Connects with Azure to fetch the latest 5 records
GetAllClients().All.SendSignalData(signalData);
}
我的js文件 - SignalR Connect代码
var signalHub = $.connection.signalHub; //alert("ACCC");
$.connection.hub.logging = true;
// Start the hub
$.connection.hub.start();
signalHub.client.SendSignalData = function (signalData) {
updateSignalData(signalData);// updates the elements in Index.cshtml
}
答案 0 :(得分:1)
当从Web服务插入的新数据到达Azure表存储时,您似乎希望将通知推送到所有连接的客户端。我建议您在执行代码将数据插入Azure表存储后调用hub方法向所有连接的客户端广播新数据。
var hub = new HubConnection("http://xxx/signalr/hubs");
var proxy = hub.CreateHubProxy("{HubName}");
hub.Start().Wait();
//invoke hub method
proxy.Invoke("{HubMethod}", "{partitionkey&rowkey}");
在您的集线器方法中,您将获得最新数据的分区键和行键,然后您可以根据分区键和行键检索实体,并调用JavaScript端函数SendSignalData
来更新网页元素。