Как отследить ошибки, возникающие в Azure Device SDK? - PullRequest
0 голосов
/ 14 ноября 2018

Я использую Azure Device SDK для .NET Core, чтобы подключить мои устройства к Azure IoT Hub. Время от времени сервер отклоняет некоторые сообщения (например, двойные обновления или телеметрические сообщения) от устройств и отвечает кодом состояния 400. В результате возникают исключения на стороне клиента, но из-за его асинхронного характера они проглатываются где-то внутри Azure. SDK и никогда не бросать на мой код.

Как я могу получать уведомления об этих ошибках, чтобы я мог обрабатывать и отображать их?

Я также вижу из кода SDK устройства Azure, что в нем используется какая-либо запись в журнал (EventSource), но это никогда не включается в коде:

From Logging.Common.cs:
Log.IsEnabled() // always returns false

Можете ли вы указать мне, каким образом я могу: 1) фактически включить регистрацию в SDK Azure Device и 2) найти содержимое, которое фактически было зарегистрировано?

Обновление: Сведения об исключении, которое проглочено где-то

// Fired here after I send twin reported properties to server:
AmqpTransportHandler.VerifyResponseMessage:
if (status >= 400)
{
    throw new InvalidOperationException("Service rejected the message with status: " + status);
}

// Then becomes caught and re-fired here:                   
AmqpTransportHandler.SendTwinPatchAsync:                    
       throw AmqpClientHelper.ToIotHubClientContract(exception);

// Then it disappears somewhere in the "dance" of the async tasks

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете захватить следы: https://github.com/Azure/azure-iot-sdk-csharp/tree/master/tools/CaptureLogs

Наш образец демонстрирует лучшие практики в отношении перехвата исключений, например: https://github.com/Azure/azure-iot-sdk-csharp/blob/master/iothub/device/samples/DeviceClientMqttSample/Program.cs

...