Хобрук: Ваш путь к мастерству в программировании

Xamarin iOS (отклонение WebClient IPv6)

Мое приложение Apple AppStore было отклонено из-за того, что оно не поддерживает сети IPv6.

Вот объявление URL-адреса моего сервера для WebClient. «ipv4» — это IPv4-адрес сервера. Я не добавил его сюда, чтобы оставаться в безопасности.

RemoteServerConnector.Instance.DefaultServerUrl = "http://ipv4/api.php"; 

Тогда у меня есть этот метод для проверки соединения:

   private class MyWebClient : WebClient {

    public int timeOut { get; set; }

    protected override WebRequest GetWebRequest(Uri address) {
        WebRequest w = base.GetWebRequest(address);
        w.Timeout = timeOut;
        return w;
    }
   }

   public bool checkInternetConnection() {
            try {
                using(MyWebClient client = new MyWebClient()) {
                    client.timeOut = ApiUrls.RemoteServerConnectorTestTimeout;
                    var removeString = "api.php";
                    var testHttp = DefaultServerUrl.EndsWith(removeString) ? DefaultServerUrl.Remove(DefaultServerUrl.Length - removeString.Length, removeString.Length) : DefaultServerUrl;            

                    using(client.OpenRead(testHttp)) {
                        return true;
                    }
                }
            } catch(WebException ex) {
                return ex.Status != WebExceptionStatus.ConnectFailure;
            } catch(Exception ex) {
                return false;
            }
        }

Он всегда выдает исключение в сетях IPv6. Я уже пробовал это решение Отклонение Xamarin iOS IPv6 App Store, но оно не т работать. Я также пытался добавить IPv6 вместо IPv4 в переменную DefaultServerUrl. Я также пробовал http://ipv6/api.php, а также http://[ipv6]/api.php

Не удается найти решение для этого типа подключения (WebClient). Я нашел только другие решения с протоколом TCP/IP, и я не хочу менять его в своем приложении.

Я также видел блог Xamarin о IPv6, но я не знаю, что делать. Не удалось добавить ссылку на него из-за разрешений.

Что я должен изменить в своем коде, чтобы он работал? Спасибо за ваше время :)


  • IP-адреса не являются частной информацией. В любом случае вы не можете использовать литералы IP-адресов. 09.11.2016
  • Возможный дубликат Почему мой WebRequest в Xamarin iOS сбой в среде ipv6? 09.11.2016
  • Итак, когда я заменю IP на имя хоста, это сработает, верно? 11.11.2016
  • Я попытался изменить IP на имя хоста и все еще не работает. Затем я попытался изменить WebClient на HttpClient (также пробовал ModernHttpClient). Все еще не работает при тестировании в сети IPv6. 14.11.2016

Ответы:


1

Поскольку я перепробовал почти все, и это не сработало, я проверил настройки сервера клиентов. Не было настроек для IPv6. Мы исправили это, и теперь он работает с ModernHttpClient. Я переключился в приложении с адреса IPv4 на имя хоста.

Мой код для ModernHttpClient.

                var handler = new NativeMessageHandler();
                using (var client = new HttpClient(handler))
                {
                    client.Timeout = TimeSpan.FromMilliseconds(ApiUrls.RemoteServerConnectorTestTimeout);
                    var removeString = "api.php";
                    var testHttp = DefaultServerUrl.EndsWith(removeString) ? DefaultServerUrl.Remove(DefaultServerUrl.Length - removeString.Length, removeString.Length) : DefaultServerUrl;

                    using (client.GetAsync(testHttp).Result)
                    {
                        return true;
                    }

                }
05.12.2016
Новые материалы

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..