包版本: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过期的异常,但为什么在向设备发送消息时不会发生这种情况?
请帮助解决此问题。
此问题仅在MQTT中存在。我使用Microsoft.Azure.Devices.Client 1.17.0进行测试。
对于AMQP和HTTP,IoT Hub不会立即切断设备连接,对于AMQP,在令牌到期后约10分钟,您将获得UnauthorizedException
。对于HTTP,此时间约为5分钟。
我在GitHub上为C#打开了一个关于Azure IoT Hub SDK上的MQTT的问题。
根据以下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行为一致。延迟是经过设计的,用于掩盖时钟差(定时偏斜(。