一段时间后,我的设备客户端正在断开连接。我通过订阅连接状态更改事件(deviceClient.SetConnectionStatusChangedHandler
)注意到了这一点。
我的连接被关闭,状态为disabled
,原因为client_close
。当我不调用任何代码以关闭连接时怎么办?我没有打电话给.CloseAsync
或.Dispose
。
鉴于此SDK旨在明确支持IoT应用,我希望此连接一次可以使用数年,而不是几分钟。
我的代码:
var authentication = new DeviceAuthenticationWithRegistrySymmetricKey(DeviceId, DeviceKey);
var deviceClient = DeviceClient.Create(HubHostName, authentication, TransportType.Amqp);
deviceClient.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
await deviceClient.SetMethodDefaultHandlerAsync(MethodCallback, null);
while (true)
{
try
{
var message = await deviceClient.ReceiveAsync();
if (message != null)
{
Console.WriteLine("Message received.");
await deviceClient.CompleteAsync(message);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
如何防止这种情况发生?失败了,我该如何恢复?
我使用的SDK版本:
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.17.0" />
这是从Windows 10上运行的.netcoreapp2.1
应用程序调用的。