如何在网络连接恢复后恢复HttpClient?

时间:2016-12-13 13:32:30

标签: exception xamarin dotnet-httpclient

如何恢复HttpClient并让它看到网络在没有完全重启应用程序的情况下再次可用?

如果在没有网络连接的情况下启动Xamarin.Forms应用程序,然后启用了后续网络连接,则HttpClient.SendAsync(request)会抛出NameResolutionFailure并且无法恢复,无论请求多少次重复。

看来,当网络连接出现时,HttpClient不知道如何恢复。

要在Android模拟器中重现此问题:

  • 确保您的应用完全关闭
  • 关闭网络(在仿真器设置中将数据状态设置为漫游,或使用状态栏切换数据或LTE切换)。
  • 启动您的应用,运行网络请求以验证它不起作用(显然,您需要尝试/捕获网络请求以避免崩溃)
  • 当应用仍处于打开状态时,启用网络
  • 运行网络请求 - 将获得NameResolutionFailure
  • 只有完整的应用程序重启才能恢复HttpClient

如果我使用etc / hosts文件中指定的域名,则不会发生此问题。

我尝试完全重新创建HttpClient并在问题发生时重新发送新请求,但这无济于事。只有完全重启应用程序才有帮助。 显然,我不能要求用户完全杀死我的应用并在每次用户打开网络连接 启动我的应用后再次启动它。

1 个答案:

答案 0 :(得分:2)

这是一个已知问题。参见:

单声道:https://bugzilla.xamarin.com/show_bug.cgi?id=45761

iOS:https://bugzilla.xamarin.com/show_bug.cgi?id=45763

Android:https://bugzilla.xamarin.com/show_bug.cgi?id=45383

解决方法是手动设置DNS刷新:

System.Net.ServicePointManager.DnsRefreshTimeout = 0;