HTTP-запрос на MAUI Hybrid (Blazor), работающий в Windows WinUI3, занимает очень много времени.C#

Место общения программистов C#
Ответить
Anonymous
 HTTP-запрос на MAUI Hybrid (Blazor), работающий в Windows WinUI3, занимает очень много времени.

Сообщение Anonymous »

У меня есть очень простой HTTP-запрос:
public async Task GetMyAccountInfoAsync()
{
var token = await auth.GetIdTokenAsync(false);

using var req = new HttpRequestMessage(
HttpMethod.Get, "https://my-company-domain.com/api/protected");
req.Headers.Add("Authorization", "Bearer " + token);

var http = new HttpClient();
using var res = await http.SendAsync(req); // Slow here
res.EnsureSuccessStatusCode();

// Irrelevant code
}

По какой-то причине, когда приложение запускает этот код, для завершения требуется ровно 43 секунды (+- несколько мс):
Изображение

Изображение

Интересно, если я отправлю запрос на https://example.com или https ://stackoverflow.com с тем же кодом, он очень быстрый, поэтому я подозреваю, что что-то не так с разрешением DNS. Я пробовал следующие исправления, но бесполезно:
  • Используйте новый экземпляр HttpClient, как в приведенном выше коде, или используйте общий единственный экземпляр из DI (исходный код).
  • Выполнение того же запроса в cUrl занимает около 1 секунды. Следовательно, это не может быть связано с сервером моей компании, поскольку я уже запустил его, и любые запросы от cUrl занимают очень короткое время.
  • Обернул приведенный выше код в Task.Run, потому что подумал, что, возможно, запускать его в потоке Main/UI нехорошо. Проблема все еще возникает.
Меня также сбивает с толку то, почему выполнение этого запроса занимает ровно 43 секунды. В остальном ответ хороший, он получает 200 ОК и ожидаемое тело. В чем может быть проблема? Пожалуйста, сообщите мне о любых способах отладки, чтобы получить более подробную информацию, если это необходимо.
Эта проблема не возникает на Android или iOS.
Обновление:< /p>
  • Вероятно, проблема с интернет-провайдером. Я использовал VPN, и проблема больше не возникает. Однако это не объясняет, почему в cUrl нет этой проблемы. Точно так же у меня был клиент, который не мог использовать Nuget в Канаде, если он не использовал VPN, но все за пределами .NET в порядке.
  • тот же код, запущенный в новом консольном приложении, также имеет ту же проблему, поэтому это похоже на проблему .NET Windows. Тем не менее, для запуска требуется около 43 секунд.
  • Мой DNS установлен на Cloudflare 1.1.1.1 с включенным DNS через TLS. Однако я не знаю, использует ли .NET ту же конфигурацию DNS.
  • Когда я прерываюсь в течение длительного периода:
Изображение
  • Это должно быть общесистемная проблема, потому что я пробовал это в PowerShell, и это тоже занимает очень много времени:
$http = New-Object System.Net.Http.HttpClient
$http.GetStringAsync("https://company-domain.com/api/protected").GetAwaiter().GetResult()


Подробнее здесь: https://stackoverflow.com/questions/791 ... -very-long
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»