Xamarin - HttpClient,在iOS和服务器之间建立连接



我在Xamarin中使用HTTPClient来调用我的服务器,但有时请求在IOS上花费大量时间,所以我确实用wireshark检查了数据包跟踪,并看到服务器没有回复。Iphone发送了一个SYN但没有来自服务器的SYN ACK,所以当我使用HTTPClient.PostAsync((并在X秒后,一个异常是抛出The request timed out。这个问题有时会出现,但并非一直出现,在Android上,HttpClient可以完美运行。

private static HttpClient client = new HttpClient();
try
{
var response = await client.PostAsync(url, json);
.....
}
catch (Exception ex)
{
//exception
}

HttpClient 实现位于 NSUrlSession 上。

欢迎来到 SO !

默认情况下,使用 NSUrlConnection、CFUrl 或NSUrlSession建立的任何连接都将在为 iOS 9 和 OS X 10.11 (El Capitan( 构建的应用程序中使用 ATS。

由于 ATS 在为 iOS 9 和 OS X 10.11 (El Capitan( 构建的应用程序中默认启用,因此所有使用 NSUrlConnection、CFUrlNSUrlSession的连接都将受到 ATS 安全要求的约束。如果您的连接不满足这些要求,它们将失败并出现异常。

ATS 将对所有互联网连接强制执行以下要求:

  • 所有连接密码都必须使用前向保密。请参阅下面的接受密码列表。

  • 传输层安全性 (TLS( 协议必须是版本 1.2 或更高版本。

  • 所有证书必须至少使用具有 2048 位或更高 RSA 密钥或 256 位或更高椭圆曲线 (ECC( 密钥的 SHA256 指纹。

同样,由于 ATS 在 iOS 9 中默认处于启用状态,因此任何尝试建立不符合这些要求的连接都将导致引发异常。

此外,如果在 xamarin iOS 中使用 http,则可以将关注内容添加到info.plist

<key>NSAppTransportSecurity</key>  
<dict>  
<key>NSAllowsArbitraryLoads</key><false/>  
</dict>

参考 : Xamarin.iOS 中的应用传输安全性

相关内容

最新更新