Так что довольно странная проблема, но, тем не менее, неплохая. Когда пользователь входит в наше приложение без Интернета, мы возвращаем NameResolutionFailure
в качестве сообщения об ошибке для попытки вызова API через HttpClient
. Ладно, все в порядке. Проблема в том, что когда пользователь подключается к Интернету, возвращается к приложению и пытается сделать другой вызов API, мы получаем то же сообщение об ошибке. Похоже, что происходит какое-то кэширование DNS?NameResolutionFailure vs ConnectFailure issue
С другой стороны, если пользователь имеет доступ к Интернету в приложении, то теряет его, когда мы пытаемся сделать вызов API, мы получаем ошибку ConnectFailure(Network is unreachable)
из вызова API. И как только пользователь подключается к Интернету, они могут мгновенно выполнять вызовы API.
Проблема, которую я пытаюсь выяснить, A) В чем разница между NameResolutionFailure
и ConnectFailure
? и В) Есть ли что-нибудь, что мы можем сделать в приложении, чтобы заставить его полностью повторить вызов API без использования кеша? Для меня это не очевидно, если DNS кэшируется или нет, но у нас есть намек на то, что происходит.
Вот часть кода (если вам нужно больше, дайте мне знать, я понял, что это единственный код, необходимый)
using(var client = new HttpClient())
{
client.Timeout = TimeSpan.FromSeconds(MaximumWebRequestTime);
HttpResponseMessage response = null;
try
{
response = await client.GetAsync(URL);
if (response.IsSuccessStatusCode) ....
Где вы поместили эту строку кода? Я получаю «Тип или имя пространства имен« ServicePointManager »не существует в пространстве имен« System.Net » – jdmdevdotnet
Wow выглядит законным. Я положил его в AppDelegate, так как я не могу получить доступ к материалам .Net в XF. И ... это сработало! По крайней мере, с первой попытки. Собираюсь тестировать больше, но спасибо, друг! – jdmdevdotnet
Да, вы должны поместить его в код платформы, как из X.F, к которому вы не можете получить доступ. – Theos