在Xamarin iOS中切换应用程序时,Web服务请求被卡住

在Xamarin iOS中切换应用程序时,Web服务请求被卡住,xamarin,xamarin.ios,nsurlsession,app-transport-security,cfnetwork,Xamarin,Xamarin.ios,Nsurlsession,App Transport Security,Cfnetwork,我们正在尝试调用Xamarin.iOS中的web服务(不安全,即HTTP)。由于它是一个httpURL,我们添加了NSAppTransportSecurity以绕过安全访问 目前,我们正在将HttpClient与NSUrlSessionHandler一起使用,以便应用info.plist中指定的ATS config client = new HttpClient(new NSUrlSessionHandler()); 问题#1 现在的问题是,每当我们启动web服务请求时,如果我们切换到另一个应

我们正在尝试调用
Xamarin.iOS
中的web服务(不安全,即HTTP)。由于它是一个
http
URL,我们添加了
NSAppTransportSecurity
以绕过安全访问

目前,我们正在将
HttpClient
NSUrlSessionHandler
一起使用,以便应用
info.plist
中指定的
ATS config

client = new HttpClient(new NSUrlSessionHandler());
问题#1

现在的问题是,每当我们启动web服务请求时,如果我们切换到另一个应用程序并返回到我们的应用程序,请求就会被卡住,并且不会返回任何内容。如果我们继续使用应用程序,它会成功返回响应

问题#2

为了解决切换应用程序的问题,我们尝试了
client=new-HttpClient(new-CFNetworkHandler())
即使用
CFNetworkHandler
解决了我们的问题,但这最终会产生另一个访问
http
URL的问题。正如我们使用的
CFNetworkHandler
,与
info.plist
中的
NSAppTransportSecurity
相关的配置将被忽略。作为

ATS不适用于您的应用程序向较低级别网络拨打的电话 接口,如网络框架或CFNetwork

使用
CFNetwork
调用webservice时出现如下错误,看起来
info.plist
config被忽略

StatusCode: 505, ReasonPhrase: 'HTTP/1.1 505 HTTP Version Not Supported', Version: 1.1, Content: System.Net.Http.CFContentStream, Headers:
{
  Date: Fri, 03 Jul 2020 06:15:19 GMT
  Connection: close
  Server: Microsoft-HTTPAPI/2.0
  Content-Type: text/html; charset=us-ascii
  Content-Length: 350
}
但另一方面,

因此,如果我们使用
NSUrlSessionHandler
切换应用程序时请求被卡住,如果我们使用
CFNetworkHandler
则ATS将不允许访问服务

ATS配置如下:

  • NSAppTransportSecurity
    设置为
    nsAllowsArbiryLoads
    设置为
    YES

  • 使用以下参数设置
    NSExceptionDomains

    a
    naaxdev.cloudapp.net

    b<代码>NSincludesubDomains设置为
    YES

    c<代码>NSExceptionAllowsInsecureHTTPLoads设置为
    YES

    d<代码>NSExceptionRequiresForwardSecretary设置为


  • 如果您收到一个505,这是来自服务器的响应,因为您的连接是通过HTTP/1.1建立的。这不是一个错误。ATS实际上会阻止在旧版本上发出网络请求。您需要弄清楚的是:为什么CFNetwork请求试图使用HTTP/1.1?或者:为什么服务器不支持TLS 1.1?如果您收到一个505,这是来自服务器的响应,因为您正在使用HTTP/1.1进行连接。这不是一个错误。ATS实际上会阻止在旧版本上发出网络请求。您需要弄清楚的是:为什么CFNetwork请求试图使用HTTP/1.1?或者:为什么服务器不支持TLS 1.1?
    App Transport Security does not apply to Xamarin apps using Managed HTTPClient implementations. It applies to connections using CFNetwork HTTPClient implementations or NSURLSession HTTPClient implementations only.