Возможно, составьте контрольный список соответствующих случаев:
1) Нет Интернета 2) Inte rnet, но база данных отключена 3) et c ..
Затем проверьте свой код и посмотрите, как он себя ведет, и убедитесь, что вы рассматриваете дела. Тогда вы можете быть (несколько) уверены, как ваш код ведет себя в этих условиях. Он также покажет вам, где происходит исключение, поэтому вы можете добавить блок try..catch для предотвращения других сбоев.
ОБНОВЛЕНИЕ - Относительно обработки ошибок:
Так что, если ваша программа не может инициализировать docClient
, это будет означать, что он не сможет записывать какие-либо журналы.
Так что может быть несколько способов справиться с этим,
1) вы могли бы иметь «резервный» метод ведения журнала, то есть, если docClient == null
войти в консоль. (Так что позже вы сможете исследовать на сервере, что пошло не так). Это позволит вам сохранить важные журналы, сохраненные, если сервер хранит эти журналы.
2) Другим резервным методом будет буферизация событий в списке памяти. и повторите попытку подключения каждые 10 минут к базе данных. Если соединение прошло успешно, вы опустошите свой буфер в базу данных.
3) Вы можете внедрить счетчик повторов, например, повторить попытку подключения X раз при запуске, в случае неудачи вы можете вернуться к другому методу или комбинации приведенных выше идей. , Кроме того, у вас может быть система, которая предупреждает вас по электронной почте или через SMS, в зависимости от того, насколько важна эта услуга.
Эти идеи связаны с проблемами подключения к базе данных. Это, тем не менее, не очень поможет вам с фактической вставкой, например, если ваше соединение с БД прервется на полпути.
Так что вам все равно может понадобиться попытка перехвата в методе InsertLogItem
вокруг фактического кода вставки. Так что это скрыло бы попытку try вокруг каждого оператора await Helper.LogActivity("OnStart");
, поскольку он интегрирован. и если этот журнал завершится неудачно, вы можете снова рассмотреть резервные методы или действия
UPDATE2) Глядя на CreateDocumentAsync
возвращаемый объект здесь: https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.client.resourceresponse-1?view=azure-dotnet
ResourceResponse<Document> response = await client.CreateDocumentAsync(collectionLink, document);
Console.WriteLine(response.RequestCharge);
Console.WriteLine(response.ActivityId);
Console.WriteLine(response.StatusCode); // HttpStatusCode.Created or 201
Кажется Вы можете получить код состояния, указывающий результат, я попытался бы закрыть сервер на полпути и наблюдать, возвращается ли ответ asyn c с соответствующим кодом ошибки или если он выдает. Если это не произойдет, вам может не понадобиться попытка перехвата, просто проверьте код возврата и затем выполните действия.