使用 IoT 中心发送 C2D 消息时无法设置 ExpiryTimeUtc 字段

Unable to set ExpiryTimeUtc field when sending C2D messages using IoT Hub

堆栈溢出问题

我有一个可以向 Android 设备发送消息的控制台应用程序。每当我尝试发送已设置 ExpiryTimeUtc 的消息时,serviceClient.SendAsync 方法会引发异常:

Unhandled Exception: Microsoft.Azure.Devices.Common.Exceptions.IotHubException: Tracking Id:{TRACKING_ID_OMITTED}-TimeStamp:09/24/2019 00:23:41-G:20-TimeStamp:09/24/2019 00:23:41 at Microsoft.Azure.Devices.AmqpServiceClient.SendAsync(String deviceId, Message message, Nullable`1 timeout)

我检查了异常代码及其 InvalidErrorCode,一点帮助也没有。

这是产生异常的片段(当 ExpiryTimeUtc 未设置时,完全相同的代码有效:

var message = new Message();
message.MessageId = messageId;
message.Ack = DeliveryAcknowledgement.Full;

message.CreationTimeUtc = creationTime; 
message.ExpiryTimeUtc = DateTimeOffset.UtcNow.DateTime.AddMinutes(1);
message.Properties.Add("type", "TEST_TYPE");
message.Properties.Add("test_data", data);
message.Properties.Add("checksum", checksum);
message.Properties.Add("page", pageNumber.ToString());
message.Properties.Add("page_total", total);

我正在使用 Microsoft.Azure.Devices v1.18.1Microsoft.NETCore.App v2.1.0

根据我的测试,DateTimeOffset.UtcNow.DateTime.AddMinutes(1) 没有设置 Kind 属性。

您可以改用DateTime.UtcNow.AddMinutes(1)。它会起作用。