WebService log4net Appender дает сбой и вылетает приложение / AzureService для многопоточных задач

В настоящее время я работаю над решением Azure для предприятий, и мне было предложено создать приложение на основе webService для log4net, которое отправляло бы журналы в выделенную службу.

У него есть некоторые причуды. Как получить токен авторизации для заголовков контента.

дело в том, что в методе send есть общая попытка - перехват, которая не перехватывает определенные исключения, возникающие из задач или httpClient.

Пример кода:

    private async void LogMessageAsync(LoggingMessage message)
    {
        if (message == null)
            return;
        try
        {
            var tokenProvider = _autorizationTokenProviderFactory.GetTokenProvider();
            if (tokenProvider != null)
            {
                var token = await tokenProvider.GetTokenAsync();

                if (token == null)
                {
                    _loggingErrorHandler.LogMissingAuthorizationToken();
                    return;
                }

                _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                var result = await _httpClient.PostAsync(_loggingServiceUrl,
                    new StringContent(JsonConvert.SerializeObject(message), Encoding.UTF8, "application/json"));
                if (!result.IsSuccessStatusCode)
                {
                    _loggingErrorHandler.LogUnsuccesfulServiceCall(result.StatusCode, _loggingServiceUrl);
                }
            }
            else
                _loggingErrorHandler.LogUnhandledException(new Exception("could not create an instance of AuthenticationTokenProvider"));
        }
        catch (Exception e)
        {
            _loggingErrorHandler.LogUnhandledException(e);
        }
    }

Самые популярные исключения, которые я не мог обработать, были

  • TaskCanceledException - от получения токена, если мое приложение находится за прокси, или происходят некоторые ошибки
  • System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка. ---> System.Net.WebException: невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени или установило подключение не удалось, потому что подключенный хост не смог ответить (это новый и вылетает служба Azure)

В настоящее время это боль в **** . никто в моей команде не может понять, почему try - catch не может облегчить исключения в случае каких-либо внешних сбоев. Я знаю, что appenders являются многопоточными, и это также может быть причиной.

Но почему, когда я нахожусь на локальной машине, ловушка успешно обрабатывает WebException, а в Azure - нет?

0 ответов

Другие вопросы по тегам