Как восстановить HttpClient после восстановления сетевого подключения?
Как оживить HttpClient
и заставить его видеть, что сеть снова доступна без полного перезапуска приложения?
В случае, когда приложение Xamarin.Forms было запущено без доступного сетевого подключения, а затем позднее было включено сетевое подключение, HttpClient.SendAsync(request)
бросает NameResolutionFailure
и он не восстанавливается, независимо от того, сколько раз запрос повторяется.
Кажется, HttpClient не знает, как восстановить, когда появляется сетевое соединение.
Чтобы воспроизвести проблему в эмуляторе Android:
- убедитесь, что ваше приложение полностью закрыто
- выключите сеть (установите для параметра "Состояние данных" значение "Роуминг" в настройках эмулятора или используйте строку состояния для переключения данных или переключателя LTE).
- запустите ваше приложение, запустите веб-запрос, чтобы убедиться, что оно не работает (очевидно, вам нужно будет попытаться обойти веб-запрос, чтобы избежать сбоев)
- пока приложение еще открыто, включите сеть
- запустите веб-запрос - получите
NameResolutionFailure
- только полный перезапуск приложения оживит HttpClient
Проблема не возникает, если я использую доменные имена, указанные в файле etc / hosts.
Я пытался полностью воссоздать HttpClient
и повторно отправить новый запрос, когда проблема возникает, но это не помогает. Помогает только полная перезагрузка приложения. Очевидно, что я не могу попросить пользователя полностью убить мое приложение и запускать его снова каждый раз, когда пользователь включил свое сетевое соединение после запуска моего приложения.
1 ответ
Это известная проблема. Увидеть:
Моно: 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;