NameResolutionFailure与ConnectFailure问题

时间:2016-10-19 16:43:45

标签: xamarin dns httpclient

这是一个相当特殊的问题,但仍然是一个非常糟糕的问题。当用户输入我们的应用程序时根本没有互联网,我们会收到NameResolutionFailure作为尝试通过HttpClient进行API调用的错误消息。好的,没关系。问题是,当用户然后连接到互联网,返回到应用程序,并尝试进行另一个API调用时,我们会收到相同的错误消息。看来某种DNS缓存正在发生?

另一方面,如果用户在应用中访问互联网,则会丢失,当我们尝试进行API调用时,我们会从API调用中收到ConnectFailure(Network is unreachable)错误。一旦用户连接到互联网,他们就可以立即进行API调用。

我想弄清楚的问题是,A)NameResolutionFailureConnectFailure之间有什么区别?和B)我们可以在app中做些什么来强制它完全重试API调用而不使用任何缓存?如果DNS被缓存与否,对我来说并不明显,但我们有一种暗示感觉就是正在发生的事情。

这是代码的一部分(如果你需要更多让我知道,我认为这是唯一需要的代码)

using(var client = new HttpClient())
{
   client.Timeout = TimeSpan.FromSeconds(MaximumWebRequestTime);    
   HttpResponseMessage response = null;
   try
   {
      response = await client.GetAsync(URL);
      if (response.IsSuccessStatusCode) ....

2 个答案:

答案 0 :(得分:4)

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

System.Net.ServicePointManager.DnsRefreshTimeout = 0;

这是一个临时修复,但现在有效。 尚未在Android上测试过它。很快就会这样做。

编辑:Android测试成功。

答案 1 :(得分:2)

我刚刚在此提出了一个错误: http://bugzilla.xamarin.com/show_bug.cgi?id=45383

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

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