Xamarin iOS HttpClient Timeout не работает - PullRequest
0 голосов
/ 09 ноября 2018

В какой-то момент мы обнаружили, что все запросы в нашем приложении имеют тайм-аут 60 секунд на iOS, хотя мы установили значение по умолчанию для HTTP-фреймворка, которое мы используем, как 3 минуты. Я попробовал следующий фрагмент кода, чтобы выяснить, есть ли проблема в библиотеке:

try
{
    using (var http = new HttpClient())
    {
        http.Timeout = TimeSpan.FromMinutes(1.5);
        await http.GetAsync("https://httpstat.us/200?sleep=70000");
    }
}
catch (Exception ex)
{
}

Этот код завершается ошибкой с исключением тайм-аута, хотя тайм-аут установлен как 90 секунд, и запрос идет в течение 70 секунд. Оказывается, он не отменяет тайм-аут по умолчанию 60 секунд. Тот же код хорошо работает на новом проекте.

В файле проекта у нас есть <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>

1 Ответ

0 голосов
/ 09 ноября 2018

Xamarin NSUrlSessionHandler использует по умолчанию NSUrlSessionConfiguration, если вы не создаете свой собственный экземпляр NSUrlSessionHandler и не предоставляете пользовательский NSUrlSessionConfiguration в его .ctor.

Время ожидания NSUrlSessionConfiguration по умолчанию установлено в iOS на 60 секунд.

Так что в вашем проекте приложения Xamarin.iOS откройте AppDelegate.cs и задайте параметры времени ожидания сеанса по умолчанию в переопределении FinishedLaunching.

NSUrlSessionConfiguration.DefaultSessionConfiguration.TimeoutIntervalForRequest = 90.0;
NSUrlSessionConfiguration.DefaultSessionConfiguration.TimeoutIntervalForResource = 90.0;

timeoutIntervalForRequest

The timeout interval to use when waiting for additional data.

timeoutIntervalForResource

The maximum amount of time that a resource request should be allowed to take.

re: https://developer.apple.com/documentation/foundation/nsurlsessionconfiguration#//apple_ref/occ/instp/NSURLSessionConfiguration/timeoutIntervalForRequest

...