【问题标题】:Xamarin iOS HttpClient Timeout doesn't workXamarin iOS HttpClient 超时不起作用
【发布时间】:2018-11-09 15:50:52
【问题描述】:

在某些时候,我们发现我们应用程序中的所有请求在 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>

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.ios timeout httpclient


    【解决方案1】:

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

    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

    【讨论】:

    • 我会试试的,谢谢。虽然它没有解释为什么同样适用于新项目。
    • 您是否指定 HttpClient 在那个新的 iOS 项目中使用 NSUrlSessionHandler?您可以查看 Xamarin 的 NSUrlSessionHandler 代码,它们不会更改默认的 NSUrlSessionConfiguration 参数,并且 HttpClient 选项不会“通过”,因为更改 default 参数不会很“礼貌”。
    • 当然。两者都使用它。
    • 由于该值可能是全局设置的,我在想我们的其他第 3 方依赖项之一是否可以重置它...
    • @SergeyMetlov 这是可能的,您可以随时在 .ator 中将自己的 NSUrlSessionConfiguration 提供给 NSUrlSessionHandler
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多