Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin NameResolutionFailure与ConnectFailure问题_Xamarin_Dns_Httpclient - Fatal编程技术网

Xamarin NameResolutionFailure与ConnectFailure问题

Xamarin NameResolutionFailure与ConnectFailure问题,xamarin,dns,httpclient,Xamarin,Dns,Httpclient,这是一个相当奇怪的问题,但却是一个相当糟糕的问题。当用户在完全没有互联网的情况下进入我们的应用程序时,我们会返回一条namesolutionfailure,作为试图通过HttpClient进行API调用的错误消息。好的,没关系。但问题是,当用户连接到internet,返回应用程序,并尝试进行另一个API调用时,我们会收到相同的错误消息。似乎发生了某种DNS缓存 另一方面,如果用户在应用程序中可以访问internet,然后会丢失它,当我们尝试进行API调用时,API调用会出现连接失败(无法访问网络

这是一个相当奇怪的问题,但却是一个相当糟糕的问题。当用户在完全没有互联网的情况下进入我们的应用程序时,我们会返回一条
namesolutionfailure
,作为试图通过
HttpClient
进行API调用的错误消息。好的,没关系。但问题是,当用户连接到internet,返回应用程序,并尝试进行另一个API调用时,我们会收到相同的错误消息。似乎发生了某种DNS缓存

另一方面,如果用户在应用程序中可以访问internet,然后会丢失它,当我们尝试进行API调用时,API调用会出现
连接失败(无法访问网络)
错误。一旦用户连接到internet,他们就可以立即进行API调用

我想弄清楚的问题是,A)名称解析失败与连接失败之间的区别是什么?B)我们是否可以在应用程序中执行任何操作,强制它在不使用任何缓存的情况下完全重试API调用?对我来说,DNS是否被缓存并不明显,但我们有一种暗示的感觉,那就是正在发生的事情

这是部分代码(如果您需要更多,请告诉我,我想这是唯一需要的代码)


我最近刚刚在这方面提出了一个错误:

这是Xamarin Android版本>=7.0的回归。你可以通过降级到XamarinAndroid 6.1.2.21来解决这个问题。由于这是一个回归,它应该是一个优先事项,并得到相对较快的修复


注意:我是一名MS/Xamarin支持工程师

刚刚在iOS上也遇到了这个问题,并通过设置DNS刷新超时来修复它:

System.Net.ServicePointManager.DnsRefreshTimeout=0

这是一个暂时的解决方案,但目前有效。 还没有在Android上测试过。我很快就会这么做


编辑:Android测试成功。

我们实际上在iOS中看到了这个错误。是否有可能存在一个影响所有平台的更大的问题?它显然比Android更大一点(尽管可能是相关的)。我已经在Xamarin论坛上发布了这个()了,有几个人对Xamarin iOS有同样的问题。我刚刚在iOS和Mono控制台项目中确认了这个问题。新的错误报告正在存档。完成后我将提供链接。Android和iOS错误报告已被标记为Mono错误报告的副本,因为在Mono>=4.6.0Ugh中,这才是真正的错误所在,令人沮丧。虽然Xamarin很好,但肯定还有一些改进的空间。但是谢谢你的帮助!你把那行代码放在哪里了?我得到一个
名称空间“System.Net”中不存在类型或名称空间名称“ServicePointManager”
Wow看起来合法。我把它放在AppDelegate中,因为我无法访问XF中的.Net内容。而且。。。成功了!至少从第一次尝试开始。我们将进行更多测试,但谢谢你,伙计!是的,您必须从X开始将其放置在平台代码中。如果您无法访问此文件。
using(var client = new HttpClient())
{
   client.Timeout = TimeSpan.FromSeconds(MaximumWebRequestTime);    
   HttpResponseMessage response = null;
   try
   {
      response = await client.GetAsync(URL);
      if (response.IsSuccessStatusCode) ....