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

Exception 恢复网络连接后如何恢复HttpClient?,exception,xamarin,dotnet-httpclient,Exception,Xamarin,Dotnet Httpclient,如何恢复HttpClient并使其在不完全重新启动应用程序的情况下再次看到网络可用? 如果Xamarin.Forms应用程序在没有可用网络连接的情况下启动,然后启用以后的网络连接,HttpClient.SendAsync(请求)抛出NameResolutionFailure,并且无论请求重复多少次,它都不会恢复 HttpClient似乎不知道在出现网络连接时如何恢复 要在Android emulator中重现此问题,请执行以下操作: 确保你的应用程序完全关闭 关闭网络(在emulator设置中

如何恢复
HttpClient
并使其在不完全重新启动应用程序的情况下再次看到网络可用?

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

HttpClient似乎不知道在出现网络连接时如何恢复

要在Android emulator中重现此问题,请执行以下操作:

  • 确保你的应用程序完全关闭
  • 关闭网络(在emulator设置中将数据状态设置为Roaming,或使用状态栏切换数据或LTE开关)
  • 启动你的应用程序,运行一个web请求以验证它是否工作(显然,你需要尝试/捕获web请求以避免崩溃)
  • 当应用程序仍处于打开状态时,启用网络
  • 运行web请求-将获得
    namesolutionfailure
  • 只有完全重新启动应用程序才能恢复HttpClient
如果我使用etc/hosts文件中指定的域名,则不会发生此问题

我试图完全重新创建
HttpClient
,并在问题发生时重新发送一个新请求,但这没有帮助。只有完全重启应用程序才有帮助。
显然,我不能要求用户在启动我的应用程序后,在每次用户打开网络连接时都完全关闭我的应用程序并重新启动它。

这是一个已知问题。见:

单声道:

iOS:

安卓:

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

System.Net.ServicePointManager.DnsRefreshTimeout = 0;

它是只在模拟器上发生还是在真实设备上发生?是的,只是在HTC One M8S上用安卓6.0 API 23复制。同事们报告说,他们也在真实的iPhone上复制了这个问题。我在Xamarin论坛上发现了一些相关帖子,其中提到Mono中有一个bug,现在应该已经修复了,但显然不是。似乎需要一些巧妙的解决方法。您是使用System.Http还是Microsoft.Http nuget?System.Net.Http.HttpClient,在我的PCL库中使用。谢谢,这似乎有效。我只是希望这个超时不会减慢请求的速度,但现在我没有注意到任何异常情况。如果我正确理解bugzilla的注释,这在Mono>4.8.0中是固定的