GetNextAsTwinAsync() 在 Azure 函数应用程序中部署后随机失败

问题描述 投票:0回答:1

我正在尝试通过 Azure 中的 C# SDK 更新设备孪生的标签。虽然在本地执行 GetNextAsTwinAsync() 工作正常,但在 Az 功能应用程序上部署函数后,该函数返回 null。 我尝试调试查询并返回 true,而且我找不到任何替代函数。我的代码是

string fetchQuery = $"SELECT * FROM devices WHERE deviceId = '{device.Id}'";
                var query = _registry.CreateQuery(fetchQuery, 1);
                var page = await query.GetNextAsTwinAsync();
                var twin = page.FirstOrDefault();
                if (twin != null)
                {
                    var patch =
                            @"{
                                tags: {
                                    tenantId: " +
                                    tenantId +
                                    @",
                                    __type__: 'iiotedge',
                                    os: 'linux'
                                }
                            }";

                        _telemetryClient.TrackTrace("updating twin" + $"{patch}");

                        var UpdateTwinStatus = await _registry.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag)

我想为基于 deviceId 的设备更新设备孪生标签

c# azure-functions azure-iot-hub azure-iot-edge azure-sdk-.net
1个回答
0
投票

I have referred this MSDOC for IoT Hub query and Function .

更新前 :

enter image description here

enter image description here

  var connectionString = "your connection string";                      var registryManager = RegistryManager.CreateFromConnectionString(connectionString);
  var query = registryManager.CreateQuery("SELECT * FROM devices", 100); 
  while (query.HasMoreResults) 
              { 
  var twins = await query.GetNextAsTwinAsync();
           foreach (var twin in twins) 
              {
                twin.Tags = new TwinCollection();
                twin.Tags["location"] = "Building A";
                twin.Tags["temperature"] = "72F";
                await registryManager.UpdateTwinAsync(twin.DeviceId, twin, twin.ETag);
                log.LogInformation($"Tags updated for device {twin.DeviceId}");
                log.LogInformation($"Tags: {twin.Tags}");
                } 
                }
                 await registryManager.CloseAsync();
                 return  new OkResult();

更新后:

enter image description here

输出:

enter image description here

在 Azure 中:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.