2016-11-09 2 views
1

Meine Apple AppStore-Anwendung wurde abgelehnt, weil IPv6-Netzwerke nicht unterstützt wurden.Xamarin iOS (WebClient IPv6-Zurückweisung)

Hier ist die Deklaration meiner Server-URL für den WebClient. "IPv4" ist die IPv4-Adresse des Servers. Ich habe es hier nicht hinzugefügt, um sicher zu bleiben.

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

Dann habe ich diese Methode Verbindung zu überprüfen:

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

Es ist immer throw Ausnahme in IPv6-Netzwerken. Ich habe diese Lösung bereits ausprobiert Xamarin iOS IPv6 App Store Rejection, aber es funktioniert nicht. Ich habe auch versucht, IPv6 anstelle von IPv4 in Variable DefaultServerUrl hinzuzufügen. Ich versuchte auch http://ipv6/api.php und auch http://[ipv6]/api.php

Kann keine Lösung für diese Art von Verbindung (WebClient) finden. Ich habe nur andere Lösungen mit TCP/IP-Protokoll gefunden und möchte diese in meiner App nicht ändern.

Ich sah auch Xamarin Blog über IPv6, aber ich weiß nicht, was zu tun ist. Der Link konnte aufgrund von Berechtigungen nicht hinzugefügt werden.

Was sollte ich in meinem Code ändern, damit es funktioniert? Vielen Dank für Ihre Zeit :)

+1

IP-Adressen sind keine privaten Informationen. In jedem Fall können Sie keine IP-Adressliterale verwenden. –

+0

Mögliches Duplikat von [Warum schlägt meine WebRequest in Xamarin iOS in der IPv6-Umgebung fehl?] (Http://stackoverflow.com/questions/40502766/why-is-my-webrequest-in-xamarin-ios-failing-in-ipv6) -Umgebung) –

+0

Also, wenn ich IP mit Hostname ersetzen, wird es funktionieren, oder? –

Antwort

1

Da ich fast alles ausprobiert habe und es nicht geklappt habe, habe ich Einstellungen des Kundenservers überprüft. Es gab keine Einstellungen für IPv6. Wir haben es behoben und jetzt arbeitet es mit ModernHttpClient. Ich habe die App von der IPv4-Adresse in den Hostnamen umgeschaltet.

Mein Code für 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; 
        } 

       }