已经按照最新的代码模板(来自VSCode)实现了一个不错的iotEdge模块,现在我实现了方法
private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason)
{
reports++;
if ((reports % 20)==0) {
Console.WriteLine("[{2}] Connection Status Changed to {0} ({1}) (now {3} reports).", status, reason, DateTimeOffset.UtcNow.ToString("u"), reports);
}
}
这种方法被称为每小时大约一百万次,这似乎是错误的。在该小时内,连接一直稳定。我想在脱机的情况下选择更改模块状态的选项。
如您所见,我不会在每次通话时出于测试目的打印输出,因为那样会使设备崩溃。
我期望与IoT-Hub保持稳定的连接,并且断开的连接并不多。我似乎做错了,但我不知道在哪里。
初始化代码:
static async Task Init()
{
MqttTransportSettings mqttSetting = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only);
ITransportSettings[] settings = { mqttSetting };
device_id = Environment.GetEnvironmentVariable("IOTEDGE_DEVICEID");
s_deviceClient = DeviceClient.CreateFromConnectionString(ioTConnString + ";DeviceId=" + device_id.ToString() + ";", TransportType.Mqtt);
s_deviceClient.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
}
答案 0 :(得分:0)
仅在连接状态更改时记录日志如何?
假设ConnectionStatus
是一个枚举,则此代码可以解决问题。
我将_previousStatus
设置为可空,以便在第一次调用该方法时肯定会触发日志记录。
ConnectionStatus? _previousStatus;
private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason) {
if (status != _previousStatus) {
_previousStatus = status;
Console.WriteLine("[{2}] Connection Status Changed to {0} ({1}) (now {3} reports).", status, reason, DateTimeOffset.UtcNow.ToString("u"), reports);
}
}