在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
anaaxdev.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.