Переустановка и тайм-аут HttpClient / httpRequestException в приложении Xamarin для Android - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь решить проблемы с подключением в моем приложении Xamarin для Android. Я использую Xamarin.Essentials для проверки подключения, а затем использую Refit для получения данных:

        var reqUtenti = new ReqUtenti();

        tokenSource.CancelAfter(20000);
        CancellationToken token = tokenSource.Token;

        var api = RestService.For<IUtentiApi>("http://10.0.2.2:3105");

        var respUtenti = new RespUtenti();

        try
        {                
            respUtenti = await api.GetUtentiAsync(reqUtenti, token);
            respUtenti.status = 0;                
        }
        catch (ApiException exception)
        {
            respUtenti.status = 1;
        }
        catch (OperationCanceledException)
        {
            respUtenti.status = 2;
        }
        catch (Exception exception)
        {
            respUtenti.status = 3;
        }

Допустим, что при работающем веб-сервисе поиск не должен занимать более 20 секунд, поэтому я установил таймаут с помощью CancellationToken. Это работает и вызывает исключение OperationCanceledException. То же самое происходит, если веб-служба не работает / недоступна после 20 секунд.

Если я не установил этот тайм-аут, а веб-сервис недоступен / не работает, я получаю httpRequestError через 70/80 секунд. Я хотел бы изменить это время ожидания и получить httpRequestError через несколько секунд. После использования HttpWebRequest я смог сделать это, установив ReadWriteTimeout.

По сути, я хочу разграничить тайм-ауты: один для завершения всего процесса и один для установления http-соединения.

Update1 Заголовок был исправлен с «Переоснащение до переоснащения», но на самом деле это переоснащение (https://github.com/reactiveui/refit)

UPDATE2 Вопрос не в том, как установить время ожидания для запроса на установку, я делаю это на моем примере. Этот тайм-аут касается всего процесса извлечения данных. Мой вопрос о том, как установить тайм-аут для сокетного соединения, лежащего в основе http-соединения. Это было возможно с HttpWebRequest, где присутствовали два тайм-аута: Timeout (весь процесс) и ReadWriteTimeout (тайм-аут для установления соединения). Я знаю, что Refit работает с HttpClient, поэтому можно установить время ожидания для запроса на подключение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...