如何在网络连接恢复后恢复 HttpClient?
How to revive HttpClient after network connection has been restored?
如何在不完全重启应用程序的情况下恢复HttpClient
并使其再次看到网络可用?
如果 Xamarin.Forms 应用程序在没有可用网络连接的情况下启动,然后启用网络连接,HttpClient.SendAsync(request)
抛出 NameResolutionFailure
并且它不会恢复,无论如何多次重复请求。
看来,HttpClient出现网络连接时不知道如何恢复。
要在 Android 模拟器中重现问题:
- 确保您的应用已完全关闭
- 关闭网络(在模拟器设置中将数据状态设置为漫游或使用状态栏切换数据或 LTE 开关)。
- 启动您的应用程序,运行 一个网络请求以验证它是否正常工作(显然,您需要 try/catch 围绕网络请求以避免崩溃)
- 在应用程序仍处于打开状态时,启用网络
- 运行 一个网络请求 - 将得到
NameResolutionFailure
- 只有完全重启应用程序才能恢复 HttpClient
如果我使用 etc/hosts 文件中指定的域名,则不会发生此问题。
我尝试完全重新创建 HttpClient
并在出现问题时重新发送新请求,但这没有帮助。只有完全重启应用程序才有帮助。
显然,我不能要求用户完全终止我的应用程序并在每次用户打开他的网络连接时重新启动它 在 启动我的应用程序后
这是一个已知问题。参见:
单声道: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;
如何在不完全重启应用程序的情况下恢复HttpClient
并使其再次看到网络可用?
如果 Xamarin.Forms 应用程序在没有可用网络连接的情况下启动,然后启用网络连接,HttpClient.SendAsync(request)
抛出 NameResolutionFailure
并且它不会恢复,无论如何多次重复请求。
看来,HttpClient出现网络连接时不知道如何恢复。
要在 Android 模拟器中重现问题:
- 确保您的应用已完全关闭
- 关闭网络(在模拟器设置中将数据状态设置为漫游或使用状态栏切换数据或 LTE 开关)。
- 启动您的应用程序,运行 一个网络请求以验证它是否正常工作(显然,您需要 try/catch 围绕网络请求以避免崩溃)
- 在应用程序仍处于打开状态时,启用网络
- 运行 一个网络请求 - 将得到
NameResolutionFailure
- 只有完全重启应用程序才能恢复 HttpClient
如果我使用 etc/hosts 文件中指定的域名,则不会发生此问题。
我尝试完全重新创建 HttpClient
并在出现问题时重新发送新请求,但这没有帮助。只有完全重启应用程序才有帮助。
显然,我不能要求用户完全终止我的应用程序并在每次用户打开他的网络连接时重新启动它 在 启动我的应用程序后
这是一个已知问题。参见:
单声道: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;