0

包版本:Microsoft.Azure.Devices.Client 1.17.0

我通过以下方式创建了一个设备客户端

deviceClient = DeviceClient.Create(s_iotHubUri, new DeviceAuthenticationWithToken(deviceId, sasToken), Microsoft.Azure.Devices.Client.TransportType.Amqp);

我使用deviceClient来发送消息deviceClient.SendEventAsync(message)。SAS 到期设置为 5 分钟(例如),但 SAS 根本没有到期,并且正在使用设备客户端发送消息。我希望有一个例外,例如:

SAS 已过期

但是消息正在正常发送。但是,如果我停止连接并尝试使用相同的 SAS 创建客户端,我会收到 SAS 过期异常,但为什么在向设备发送消息时不会发生这种情况?

请帮助解决这个问题。

4

2 回答 2

0

这个问题只存在于我的 MQTT 中。我使用 Microsoft.Azure.Devices.Client 1.17.0 进行测试。

对于 AMQP 和 HTTP,IoT Hub 不会立即切断设备连接,对于 AMQP,令牌过期后大约 10 分钟您将获得UnauthorizedException. 对于 HTTP,这个时间大约是 5 分钟。

我在 GitHub 上的 Azure IoT Hub SDK for C# 上打开了一个关于 MQTT 的问题。

于 2018-07-26T06:09:33.347 回答
0

根据以下 git hub 问题,https://github.com/Azure/azure-iot-sdk-csharp/issues/564https://github.com/Azure/azure-iot-sdk-csharp/issues/ 565 . 使用新的 c# SDK 版本,

Microsoft.Azure.Devices.Client 1.17.1

IoTHub 在用户设置的 SAS 到期时间后 10 分钟内停止接受 MQTT 令牌,这与 AMQP 行为一致。延迟是设计使然,用于掩盖时钟差异(时序偏差)。

于 2018-08-09T09:16:49.567 回答