2016-11-09 66 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; 
        } 

       }