为了账号安全,请及时绑定邮箱和手机立即绑定

使用 c# 在 azure iot hub 上批量导入注册设备不起作用?

使用 c# 在 azure iot hub 上批量导入注册设备不起作用?

C#
白衣染霜花 2022-07-10 10:29:00
我从github msdn 链接获取了批量导入代码, 但在控制台和 Web 应用程序中使用相同的代码,它无法将任何新设备注册到 iot 集线器中。它正在将设备列表创建到 blob 文件中,但为什么它无法成功执行导入作业?我也没有任何例外。class Program    {        static RegistryManager registryManager;        static string connectionString = "iothub-connectionstring";        static void Main(string[] args)        {            BulkImport();        }        static string GetContainerSasUri(CloudBlobContainer container)        {            // Set the expiry time and permissions for the container.            // In this case no start time is specified, so the            // shared access signature becomes valid immediately.            var sasConstraints = new SharedAccessBlobPolicy();            sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24);            sasConstraints.Permissions =              SharedAccessBlobPermissions.Write |              SharedAccessBlobPermissions.Read |              SharedAccessBlobPermissions.Delete;            // Generate the shared access signature on the container,            // setting the constraints directly on the signature.            string sasContainerToken = container.GetSharedAccessSignature(sasConstraints);            // Return the URI string for the container,            // including the SAS token.            return container.Uri + sasContainerToken;        }
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

批量导入设备方法背后是对 Azure IoT 中心面向服务的终结点的 REST API 调用。使用registryManager.ImportDevicesAsync方法是在 Azure IoT 中心命名空间中创建后台作业。接受作业后,将返回 jobId 以获取其轮询处理状态。


基本上,我们需要两个 REST API,例如 POST 和 GET 作业。更多细节可以在文档服务-创建导入导出作业和服务-获取导入导出作业中找到。


以下步骤显示如何使用 REST API 测试此批量导入设备作业:


使用最新的Microsoft Azure 存储资源管理器创建两个容器,例如一个用于输入,另一个用于输出日志消息。此外,此工具允许为这些容器生成带有 sas 令牌的完整 uri 地址。


创建一个名为devices.txt的文本文件,并包含以下内容(配置两个设备的示例):


{"id":"Device1",  "importMode":"Create", "status":"enabled", "properties":{"desired":{"abcd":12345 } } }

{"id":"Device2",  "importMode":"Create", "status":"enabled", "properties":{"desired":{"abcd":12345 } } }

将文件devices.txt上传到输入容器。


将作业发布到 Azure IoT 中心


POST https://{yourIoTHub}.azure-devices.net/jobs/create?api-version=2018-06-30

Authorization:{yourIoTHubSasToken}

body: 

{

  "inputBlobContainerUri": "{inputContainerUriWithSasToken}",

  "outputBlobContainerUri": "{outputContainerUriWithSasToken}",

  "inputBlobName": "devices.txt",

  "type": "import"

}

回应应该是:


{

     "jobId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",

     "startTimeUtc": "2019-01-06T16:19:54.9535051Z",

     "type": "import",

     "status": "enqueued",

     "progress": 0,

     "inputBlobContainerUri":  "xxxxxx",

     "outputBlobContainerUri": "xxxxxx",

     "excludeKeysInExport": false,

     "useSecondaryStorageAsSource": false

 }

轮询作业状态,直到作业完成、失败或取消


GET https://{yourIoTHub}.azure-devices.net/jobs/xxxxx-xxxx-xxxx-xxxxxxxxxxxx?api-version=2018-06-30

Authorization:{yourIoTHubSasToken}

响应:


{

  "jobId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",

  "startTimeUtc": "2019-01-06T16:19:54.9535051Z",

  "endTimeUtc": "2019-01-06T16:20:11.4043137Z",

  "type": "import",

  "status": "completed",

  "progress": 100,

  "outputBlobContainerUri": "",

  "excludeKeysInExport": false,

  "useSecondaryStorageAsSource": false

}

请注意,上述步骤 4. 和 5. 可以使用 Azure Functions 来实现,以隐藏与存储和物联网中心相关的所有详细信息。


查看完整回答
反对 回复 2022-07-10
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号