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 - нет?