Как восстановить HttpClient
и заставить его видеть, что сеть доступна снова без полного перезапуска приложения?Как восстановить HttpClient после восстановления сетевого соединения?
В случае, когда приложение Xamarin.Forms было начато без подключения к сети доступным, а позже сетевое соединение включено, HttpClient.SendAsync(request)
бросает NameResolutionFailure
и она не восстанавливается, независимо от того, сколько раз повторяются запрос.
Кажется, HttpClient не знает, как восстановить, когда появляется сетевое соединение.
Чтобы воспроизвести проблему в Android эмулятора:
- чтобы приложение полностью закрыт
- очередь сети выключен (установлен статус данных Роуминг в настройках эмулятора или использовать строку состояния для переключения данных или LTE переключатель).
- запустить приложение, запустить веб-запрос, чтобы убедиться, что он не работает (очевидно, вам нужно будет попробовать/поймать вокруг веб-запроса, чтобы избежать столкновения)
- в то время как приложение остается открытым, включите сеть
- запустить веб-запрос - получите
NameResolutionFailure
- только полная перезагрузка приложения возродится HttpClient
проблема не произойдет, если я использовать доменные имена, указанные в файле и т.д./хостов.
Я попытался полностью воссоздать HttpClient
и отправить новый запрос при возникновении проблемы, но это не поможет. Только полный перезапуск приложения помогает. Очевидно, я не могу попросить пользователя полностью убить мое приложение и запускать его каждый раз, когда пользователь включил сетевое подключение после, запускающее мое приложение.
Происходит ли это на эмуляторе или только на реальном устройстве тоже? –
Да, только что воспроизведено на HTC One M8S с Android 6.0 API 23. Коллеги сообщают, что они воспроизвели эту проблему и на реальном iPhone. Я нашел несколько связанных сообщений на форумах Xamarin, в которых упоминалось, что в Mono есть ошибка, и к настоящему времени это должно быть исправлено, но, видимо, это не так. Кажется, может потребоваться какое-то умное обходное решение. – JustAMartin
Вы используете System.Http или Microsoft.Http nuget? –