我使用https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-getstarted作为参考来创建我的ASPNet MVC应用程序
我使用以下代码从IoT Hub接收数据
private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
{
var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
while (true)
{
if (ct.IsCancellationRequested) break;
EventData eventData = await eventHubReceiver.ReceiveAsync();
if (eventData == null) continue;
string data = Encoding.UTF8.GetString(eventData.GetBytes());
//Console.WriteLine("Message received. Partition: {0} Data: '{1}'", partition, data);
}
}
由此我看到变量 字符串数据 中收到的数据 现在,我希望在从IoT Hub收到的View(MVC View,即网页)上显示这些数据。
如何将 var string data 中的值定向显示在View上?
答案 0 :(得分:1)
这里需要一些实时处理基础设施。
正如@juunas所说,signal-r在这里是一个不错的选择。除此之外,如果安全性是一个因素,对于像这样的简单事情来说这将是一个很大的开销,你可以创建一个web api,或者一个返回JsonResult的mvc动作,并且每隔x秒轮询一次。
更新:
基本上,你不能 - 你需要实时处理。
使用while(true)循环,您将阻止请求线程,它将永远不会返回。您只需轮询一个WebAPI / Json MVC控制器,您就可以从IoT Hub消息队列中获取最新消息。
UI在您的应用上每隔X秒轮询一次WebAPI / MVC Json操作,发送最后收到的消息ID
WebAPI / MVC Json Action从IoT Hub消息队列中获取所有消息>最后一条消息ID
将新邮件发送回客户端
这将是一种解决问题的简单方法,并且与没有WebSockets或Signal-R的情况一样接近实时。 (顺便说一句,你可以在一个WebAPI / MVC应用程序中托管Signal-R,你不必在第二个应用程序中拥有)