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

我从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;

        }

白衣染霜花
浏览 93回答 1
1回答

呼如林

批量导入设备方法背后是对 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-30Authorization:{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-30Authorization:{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 来实现,以隐藏与存储和物联网中心相关的所有详细信息。
打开App,查看更多内容
随时随地看视频慕课网APP