У меня есть следующий код для получения токена на предъявителя и вызова Web API в приложении c #.
public async Task<HttpResponseMessage> SendHttpRequest()
{
HttpResponseMessage response = null;
try
{
HttpClient client = new HttpClient();
string accessToken = await GetBearerToken(resourceUrl, clientId, clientSecret, tokenProviderUrl);
if (!string.IsNullOrEmpty(accessToken))
httpRequest.Headers.Add("Authorization", ("Bearer " + accessToken));
response = await client.SendAsync(httpRequest);
}
catch(Exception ex)
{
log.Error("Exception raised while sending HTTP request");
log.Error("Exception details : " + ex.Message);
}
return response;
}
public async Task<string> GetBearerToken()
{
HttpResponseMessage response = null;
HttpClient client = new HttpClient();
string token = "";
try
{
var request = new HttpRequestMessage(HttpMethod.Post, tokenProviderUrl);
request.Content = new FormUrlEncodedContent(new Dictionary<string, string> {
{ "client_id",clientId},
{ "client_secret", clientSecret },
{ "grant_type", "client_credentials" },
{ "resource", resource },
});
response = await client.SendAsync(request);
var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
token = payload.Value<string>("access_token");
}
catch (HttpRequestException ex)
{
log.Error("Error in GetToken : " + ex.Message.ToString());
}
return token;
}
Проблема, с которой я здесь сталкиваюсь, заключается в том, что иногда этот код вызывает исключение, говорящее «Задача была отменена» время от времени, а не каждый раз. Я искал в Интернете и наткнулся на этот ответ. Итак, я проверил, отменяется ли задание. Затем я увеличил время ожидания до 30 минут, как указано в этом ответе.
Теперь странно то, что задача ждет 30 минут (или любой другой тайм-аут, который мы указали), а затем выдает «Задача была отменена». Это сводит меня с ума.
Я хочу знать, почему Задание отменяется, если мы не запрашиваем его явно, и от кого или откуда оно отменяется? Можно ли найти источник запроса на отмену?
Любая помощь в этом отношении высоко ценится, так как я не могу понять проблему.
Пожалуйста, предположите, что все переменные имеют правильные значения, хотя это здесь не упоминается.
EDIT
Сообщение об исключении:
Задача была отменена.
Это трассировка стека исключений:
Исключение StackTrace: в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в
System.Net.Http.HttpClient.d__58.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в System.Runtime.CompilerServices.TaskAwaiter`1.GetResult ()
в SampleProject.d__2.MoveNext () в
C: \ Users \ SampleProject \ HttpHelper.cs: строка 145
--- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---