2016-11-09 1 views
1

Mon application Apple AppStore a été refusée pour ne pas prendre en charge les réseaux IPv6.Xamarin iOS (rejet WebClient IPv6)

Voici la déclaration de mon URL de serveur pour WebClient. "ipv4" est l'adresse IPv4 du serveur. Je ne l'ai pas ajouté ici pour rester en sécurité.

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

Ensuite, je dois cette méthode pour vérifier la connexion:

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; 
      } 
     } 

Il exception toujours lancer dans les réseaux IPv6. J'ai déjà essayé cette solution Xamarin iOS IPv6 App Store Rejection, mais cela ne fonctionne pas. J'ai également essayé d'ajouter IPv6 au lieu de IPv4 dans la variable DefaultServerUrl. J'ai également essayé http://ipv6/api.php et aussi http://[ipv6]/api.php

Impossible de trouver une solution pour ce type de connexion (WebClient). J'ai trouvé seulement d'autres solutions avec le protocole TCP/IP et je ne veux pas le changer dans mon application.

J'ai également vu Xamarin blog sur IPv6, mais je ne sais pas quoi faire. Impossible d'ajouter un lien, à cause des autorisations.

Que devrais-je changer dans mon code pour le faire fonctionner? Merci pour votre temps :)

+1

Les adresses IP ne sont pas des informations privées. Dans tous les cas, vous ne pouvez pas utiliser les littéraux d'adresse IP. –

+0

Copie possible de [Pourquoi ma demande WebRequest dans Xamarin iOS échoue-t-elle dans l'environnement ipv6?] (Http://stackoverflow.com/questions/40502766/why-is-my-webrequest-in-xamarin-ios-failing-in-ipv6 -environment) –

+0

Ainsi, quand je remplace IP avec Hostname, cela fonctionnera, non? –

Répondre

1

Comme j'ai essayé presque tout et cela n'a pas fonctionné j'ai vérifié les paramètres du serveur de clients. Il n'y avait pas de paramètres pour IPv6. Nous l'avons corrigé et maintenant il travaille avec avec ModernHttpClient. J'ai basculé dans l'application de l'adresse IPv4 à hostname.

Mon code pour 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; 
        } 

       }