首页 > 解决方案 > Xamarin iOS HttpClient 超时不起作用

问题描述

在某些时候,我们发现我们应用程序中的所有请求在 iOS 上都有 60 秒的超时时间,尽管我们将我们使用的 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>

标签: xamarinxamarin.formsxamarin.iostimeouthttpclient

解决方案


如果您没有创建自己的实例并在其 .ctor 中提供自定义, Xamarin 将NSUrlSessionHandler使用默认值。 NSUrlSessionConfigurationNSUrlSessionHandlerNSUrlSessionConfiguration

在 iOS 中,默认NSUrlSessionConfiguration超时设置为 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.

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


推荐阅读