繁体   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