Xamarin Android应用程序上的改装和HttpClient超时/ httpRequestException

时间:2019-03-19 11:46:31

标签: android xamarin httpclient refit

我正在尝试在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;
        }

让我们说,使用正在运行的Web服务,检索时间不应超过20秒,因此我使用CancellationToken设置了超时时间。它可以工作并引发OperationCanceledException。 如果20秒钟后Web服务未运行/无法访问,也会发生同样的情况。

如果我没有设置该超时时间,并且Web服务无法访问/无法正常工作,则在70/80秒后会出现httpRequestError。 我想更改此超时,并在几秒钟后收到httpRequestError。 使用HttpWebRequest之后,我可以通过设置ReadWriteTimeout来完成此操作。

本质上,我想区分超时:一个用于完成整个过程,另一个用于建立http连接。

UPDATE1 标题已从“改装”更正为“改装”,但实际上是“改装(https://github.com/reactiveui/refit

UPDATE2 问题不在于如何为改装请求设置超时,我在示例中进行了设置。该超时涉及检索数据的整个过程。 我的问题是如何为HTTP连接基础的套接字连接设置超时。 HttpWebRequest可能存在两个超时:超时(整个进程)和ReadWriteTimeout(建立连接的超时)。我知道Refit可与HttpClient配合使用,因此可以为连接请求设置超时时间吗?

0 个答案:

没有答案