2016-11-09 99 views
1

我的Apple AppStore應用程序因不支持IPv6網絡而遭到拒絕。Xamarin iOS(Web客戶端IPv6拒絕)

這是WebClient的服務器URL的聲明。 「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 Rejection,但它不起作用。我也嘗試在變量DefaultServerUrl中添加IPv6而不是IPv4。我也試過http://ipv6/api.phphttp://[ipv6]/api.php

無法找到任何解決方案這種類型的連接(WebClient)。我發現只有TCP/IP協議的其他解決方案,我不想在我的應用程序中更改它。

我還看到Xamarin博客關於IPv6,但我不知道該怎麼辦。由於權限,無法添加鏈接。

我應該更改我的代碼以使其工作?謝謝你的時間:)

+1

IP地址不是私人信息。無論如何,你不能使用IP地址文字。 –

+0

[爲什麼我的WebRequest在Xamarin iOS中在ipv6環境中失敗?](http://stackoverflow.com/questions/40502766/why-is-my-webrequest-in-xamarin-ios-failing-in-ipv6 -environment) –

+0

所以,當我用主機名替換IP時,它會起作用,對吧? –

回答

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

       }