打包版本: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过期异常,但是为什么在向设备发送消息时却没有发生这种情况?
请帮助解决此问题。
答案 0 :(得分:0)
对我来说,此问题仅在MQTT中存在。我使用Microsoft.Azure.Devices.Client 1.17.0进行了测试。
对于AMQP和HTTP,IoT Hub不会立即断开设备连接,对于AMQP,令牌过期约10分钟后,您将获得UnauthorizedException
。对于HTTP,此时间约为5分钟。
我已经在GitHub上的C#的Azure IoT中心SDK上打开了issue about MQTT。
答案 1 :(得分:0)
根据以下git hub问题https://github.com/Azure/azure-iot-sdk-csharp/issues/564和https://github.com/Azure/azure-iot-sdk-csharp/issues/565。使用新的c#SDK版本
Microsoft.Azure.Devices.Client 1.17.1
IoTHub在用户设置的SAS到期时间后的10分钟内停止接受MQTT令牌,这与AMQP行为一致。延迟是设计使然,用于弥补时钟差异(时序偏斜)。