Xamarin iOS(WebClient IPv6 拒绝)
Xamarin iOS (WebClient IPv6 Rejection)
我的 Apple AppStore 应用程序因不支持 IPv6 网络而被拒绝。
这是我的服务器 URL WebClient 的声明。 "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, but it doesn't work. I also tried to add IPv6 instead of IPv4 in variable DefaultServerUrl. I also tried http://ipv6/api.php and also http://[ipv6]/api.php
无法为此类连接 (WebClient) 找到任何解决方案。我只找到了具有 TCP/IP 协议的其他解决方案,我不想在我的应用程序中更改它。
我也看到 Xamarin 关于 IPv6 的博客,但我不知道该怎么做。由于权限问题,无法添加 link。
我应该在我的代码中更改什么才能使其正常工作?感谢您的宝贵时间:)
由于我尝试了几乎所有方法但都没有用,所以我检查了客户服务器的设置。没有 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;
}
}
我的 Apple AppStore 应用程序因不支持 IPv6 网络而被拒绝。
这是我的服务器 URL WebClient 的声明。 "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, but it doesn't work. I also tried to add IPv6 instead of IPv4 in variable DefaultServerUrl. I also tried http://ipv6/api.php and also http://[ipv6]/api.php
无法为此类连接 (WebClient) 找到任何解决方案。我只找到了具有 TCP/IP 协议的其他解决方案,我不想在我的应用程序中更改它。
我也看到 Xamarin 关于 IPv6 的博客,但我不知道该怎么做。由于权限问题,无法添加 link。
我应该在我的代码中更改什么才能使其正常工作?感谢您的宝贵时间:)
由于我尝试了几乎所有方法但都没有用,所以我检查了客户服务器的设置。没有 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;
}
}