簡體   English   中英

Azure流分析錯誤:無法反序列化來自IOT集線器的輸入事件

[英]Azure Stream Analytics Error : Could not deserialize the input event(s) from IOT hub

我已經創建了Stream Analytics作業,以從IOT集線器讀取數據作為輸入並將數據存儲到SQL DB。

以下是為Steam Analytics作業配置的一些重要輸入詳細信息,即事件序列化格式:JSON編碼:utf-8

該消息從Dotnet模擬代碼發送到IOT Hub。

在執行工作時,出現以下錯誤:

 Could not deserialize the input event as Json. Some possible reasons: 
 1) Malformed events 
 2) Input source configured with incorrect serialization format

這是我的dotnet代碼。

       private static async void ReceiveC2dAsync()
    {
        Console.WriteLine("\nReceiving cloud to device messages from service");
        while (true)
        {
            Message receivedMessage = await deviceClient.ReceiveAsync();
            if (receivedMessage == null) continue;

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Received message: {0}", Encoding.ASCII.GetString(receivedMessage.GetBytes()));
            Console.ResetColor();

            await deviceClient.CompleteAsync(receivedMessage);
        }
    }
    private static async void SendDeviceToCloudMessagesAsync()
    {
        double minTemperature = 20;
        double minHumidity = 60;
        int messageId = 1;
        Random rand = new Random();

        while (true)
        {
            double currentTemperature = minTemperature + rand.NextDouble() * 15;
            double currentHumidity = minHumidity + rand.NextDouble() * 20;

            var telemetryDataPoint = new
            {
                messageId = messageId++,
                deviceId = "myFirstDevice",
                temperature = currentTemperature,
                humidity = currentHumidity
            };
            var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
            string levelValue;
            string temperatureAlert = "false";


            if (rand.NextDouble() > 0.7)
            {
                if (rand.NextDouble() > 0.5)
                {
                    messageString = "This is a critical message";
                    levelValue = "critical";
                }
                else
                {
                    messageString = "This is a storage message";
                    levelValue = "storage";
                }
            }
            else
            {
                levelValue = "normal";
            }

            if(currentTemperature > 30)
            {
                temperatureAlert = "true";
            }

            var message = new Message(Encoding.UTF8.GetBytes(messageString));
            message.Properties.Add("level", levelValue);
            message.Properties.Add("temperatureAlert", temperatureAlert);

            await deviceClient.SendEventAsync(message);
            Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);

            await Task.Delay(1000);
        }
    }

看起來您的模擬設備生成了非json格式的消息,例如“這是關鍵消息”和“這是存儲消息”。

基本上,有兩種選擇可解決此問題:1.在模擬代碼中注釋此部分,或2.在Azure IoT中心路由中為這些消息添加篩選器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM