Comment faire pour relancer HttpClient
et lui faire voir que le réseau est disponible à nouveau sans redémarrer complètement l'application?Comment faire pour relancer HttpClient après la restauration de la connexion réseau?
Dans le cas où une application Xamarin.Forms a été lancée sans connexion réseau disponible et puis plus tard la connexion réseau est activée, HttpClient.SendAsync(request)
lancers francs NameResolutionFailure
et il ne récupère pas, peu importe combien de fois la demande est répétée.
Il semble que HttpClient ne sait pas comment récupérer lorsque la connexion réseau apparaît.
Pour reproduire le problème dans l'émulateur Android:
- vous assurer que votre application est complètement fermé
- réseau Désactiver (définir l'état des données à l'itinérance dans les paramètres de l'émulateur ou utilisez la barre d'état pour activer les données ou LTE commutateur).
- lancer votre application, exécutez une requête Web pour vérifier qu'il ne fonctionne pas (évidemment, vous aurez besoin try/catch autour de la demande Web pour éviter de s'écraser)
- lorsque l'application est toujours ouverte, permettre au réseau
- exécuter une requête Web - va se
NameResolutionFailure
- seulement plein redémarrage de l'application ressuscitera HttpClient
Le problème ne se produit pas si j'utilise des noms de domaine spécifiés dans etc/hosts.
J'ai essayé de recréer entièrement HttpClient
et de renvoyer une nouvelle requête lorsque le problème survient, mais cela n'aide pas. Seul le redémarrage complet de l'application aide. Évidemment, je ne peux pas demander à l'utilisateur de tuer complètement mon application et de la redémarrer chaque fois que l'utilisateur a allumé sa connexion réseau après en lançant mon application.
se fait-il sur l'émulateur uniquement ou sur un vrai appareil aussi? –
Oui, juste reproduit sur HTC One M8S avec Android 6.0 API 23. Collègues rapportent, ils ont reproduit le problème également sur un vrai iPhone. J'ai trouvé quelques messages sur les forums Xamarin qui mentionnaient qu'il y avait un bug dans Mono et que ça aurait dû être corrigé, mais apparemment ce n'est pas le cas. Il semble qu'une solution astucieuse pourrait être nécessaire. – JustAMartin
Utilisez-vous System.Http ou Microsoft.Http nuget? –