xamarin - 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>
解决方案
如果您没有创建自己的实例并在其 .ctor 中提供自定义, Xamarin 将NSUrlSessionHandler
使用默认值。 NSUrlSessionConfiguration
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.
推荐阅读
- node.js - 错误 - 创建服务时回退重新启动失败的容器
- r - 使用 scale_fill_brewer 在 ggplot 上更改颜色的问题
- facebook - nginx fbclid 从 url 中删除
- javascript - 使用 HashRouter 时以编程方式导航
- python-3.x - 如何修复不遵循配置的画布大小
- r - 如何计算文本但不包括括号中的单词?
- r - 从具有 R 的非对称(有向)邻接矩阵中找到所有节点的度数(中心性)
- ruby-on-rails - 如何修复 Ruby 中的“OpenSSL::SSL::SSLError”错误?
- string - 范围内的算术运算顺序问题
- python - `CommandList[Count:Count + len(Command)] == Command`中的`Count : Count`在python中做了什么?