这是一个相当特殊的问题,但仍然是一个非常糟糕的问题。当用户输入我们的应用程序时根本没有互联网,我们会收到NameResolutionFailure
作为尝试通过HttpClient
进行API调用的错误消息。好的,没关系。问题是,当用户然后连接到互联网,返回到应用程序,并尝试进行另一个API调用时,我们会收到相同的错误消息。看来某种DNS缓存正在发生?
另一方面,如果用户在应用中访问互联网,则会丢失,当我们尝试进行API调用时,我们会从API调用中收到ConnectFailure(Network is unreachable)
错误。一旦用户连接到互联网,他们就可以立即进行API调用。
我想弄清楚的问题是,A)NameResolutionFailure
和ConnectFailure
之间有什么区别?和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) ....
答案 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支持工程师