使用RegistryManager.ApplyConfigurationContentOnDeviceAsync进行部署-格式错误的内容

问题描述

我正在构建一个工具,该工具可用于基于CMDB中的配置集或属性将模块部署到IoTEdge。

该工具能够生成部署清单,并且正在使用.NET SDK-特别是-RegistryManager.ApplyConfigurationContentOnDeviceAsync来应用部署。

ConfigurationContent中的序列化字符串如下。应用此模板后,SDK中没有错误,但是在Edge的门户中,其状态显示为400-部署配置格式错误或无效。

使用VSCode中的“单设备”部署来应用时,相同的模板(只是ModulesContent)可以正常工作。因此,不确定是什么原因导致模板部署无法通过RegistryManager失败。无法找出模板中格式错误的内容。感谢任何指导。

{
  "ModulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.0","runtime": {
          "type": "docker","settings": {
            "minDockerVersion": "v1.25","loggingOptions": "","registryCredentials": {
              "paddycontainers": {
                "username": "XXXXXXcontainers","password": "EdgeHUBT9QuW=x2v3Z37jAZUREIOTg11uoT9Y","address": "XXXXXXcontainers.azurecr.io"
              }
            }
          }
        },"systemModules": {
          "edgeAgent": {
            "type": "docker","settings": {
              "image": "mcr.microsoft.com/azureiotedge-agent:1.0.9.2","createOptions": "{}"
            }
          },"edgeHub": {
            "type": "docker","status": "running","restartPolicy": "always","settings": {
              "image": "mcr.microsoft.com/azureiotedge-hub:1.0.9.2","createOptions": "{\"HostConfig\":{\"ExposedPorts\":{\"9600/tcp\":{},\"5671/tcp\":{},\"8883/tcp\":{}}}}"
            },"env": {
              "experimentalfeatures__enabled": {
                "value": true
              },"experimentalfeatures__enableMetrics": {
                "value": true
              }
            }
          }
        },"modules": {
          "PySendModule1": {
            "version": "1.0","type": "docker","settings": {
              "image": "paddycontainers.azurecr.io/pysendmodule:0.0.1-amd64.debug"
            }
          },"PySendModule2": {
            "version": "1.0","PySendModule3": {
            "version": "1.0","PySendModule4": {
            "version": "1.0","PySendModule5": {
            "version": "1.0","PySendModule6": {
            "version": "1.0","SimulatedTemperatureSensor1": {
            "version": "1.0","settings": {
              "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0","metricscollector1": {
            "version": "1.0","settings": {
              "image": "veyalla/metricscollector:0.0.4-amd64","createOptions": "{}"
            },"env": {
              "AzMonWorkspaceId": {
                "value": "81nsaux72-0fec-8818-a258-71hshs7jas9"
              },"AzMonWorkspaceKey": {
                "value": "81jsajswkjsdkahialkasdmacjklaja=="
              }
            }
          }
        }
      }
    },"$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.0","routes": {},"storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    },"PySendModule1": {
      "properties.desired": {
        "camera360": "172.1.1.1","fontSize": "10","message": 300,"format": "Json","target": "AzureLogAnalytics","endpoints": {
          "edgeHub": "http://edgeHub:9600/metrics"
        }
      }
    },"PySendModule2": {
      "properties.desired": {
        "camera360": "172.1.1.2","PySendModule3": {
      "properties.desired": {
        "camera360": "172.1.1.3","PySendModule4": {
      "properties.desired": {
        "camera360": "172.1.1.4","PySendModule5": {
      "properties.desired": {
        "camera360": "172.1.1.5","PySendModule6": {
      "properties.desired": {
        "camera360": "172.1.1.6","endpoints": {
          "edgeHub": "http://edgeHub:9600/metrics"
        }
      }
    }
  },"DeviceContent": null
}

解决方法

我不完全知道区别以及为什么会起作用。我有一个可以成功部署的工具版本。我正在使用Newtonsoft进行JSON解析。我已经在CSharp SDK中切换到System.Text.Json,这似乎已将JSON分解为格式错误的状态。我切换回Newtonsoft,部署很好。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...