在 View(网页)上显示从 IoT Hub 接收到的数据

display data received from IoT Hub on View(web page)

我使用 https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-getstarted 作为参考来创建我的 ASPNet MVC 应用程序

我正在使用以下代码从 IoT 中心接收数据

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);

    }
}

通过这个我看到数据被接收到变量 string data 现在我想在视图(MVC 视图,即网页)上显示从 IoT 中心接收到的数据。

我的查询

如何将var字符串数据中的值定向显示在View上?

您需要一些 real-time 处理基础设施。

正如@juunas 所说,signal-r 在这里是一个不错的选择。除此之外,如果安全是一个因素,那么对于这样一个简单的事情来说,这将是一个很大的开销,您可以创建一个 web api,或者一个 return 是 Json 的 mvc 操作结果,并每 x 秒轮询一次。

更新:

基本上,您不能 - 您需要对此进行实时处理。

使用 while(true) 循环,您将阻塞请求线程,它永远不会 return。您可以只轮询一个 WebAPI/Json MVC 控制器,以获取来自 IoT 中心消息队列的最新消息。

  1. UI 每隔 X 秒轮询一次 WebAPI/MVC Json 在您的应用程序上发送最后收到的消息 id

  2. WebAPI/MVCJson 操作从 IoT 中心消息队列获取所有消息 > 最后一条消息 id

  3. 将新消息发送回客户端

这将是解决您的问题的一种简单方法,并且在没有 WebSockets 或 Signal-R 的情况下将尽可能接近实时。 (顺便说一句,您可以在 WebAPI/MVC 应用程序中托管 Signal-R,您不必在第二个应用程序中)