2016-11-09 20 views
1

私のApple AppStoreアプリケーションは、IPv6ネットワークをサポートしていないため拒否されました。Xamarin iOS(WebClient 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にIPv4の代わりにIPv6を追加しようとしました。私も試しましたhttp://ipv6/api.phpまた、http://[ipv6]/api.php

このタイプの接続(WebClient)の解決策は見つかりません。私はTCP/IPプロトコルを持つ他のソリューションしか見つけず、私のアプリでそれを変更したくありません。

私はIPv6についてもXamarinのブログを見ましたが、私は何をすべきか分かりません。権限のために、リンクを追加できませんでした。

コードを変更して動作させるにはどうすればよいですか?ありがとうございました:)

+1

IPアドレスはプライベートな情報ではありません。いずれの場合でも、IPアドレスリテラルは使用できません。 –

+0

xamarin iOSのWebRequestがipv6環境で動作しないのはなぜですか?(http://stackoverflow.com/questions/40502766/why-is-my-webrequest-in-xamarin-ios-failing-in-ipv6 -environment) –

+0

IPをHostnameに置き換えると正常に動作しますか? –

答えて

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

       } 
関連する問題