Xamarin iOS的IPv6应用程序商店拒绝
我们一直在构建一个iOS应用程序是关于客户端 - 服务器应用程序。 我们在Xamarin的iOS应用程序中使用SQL连接和WCF Web服务。Xamarin iOS的IPv6应用程序商店拒绝
SQL连接代码:
String ips = "10.0.0.1" ; //Example.
SqlConnection con = new SqlConnection(@"Data Source=" + ips + "; initial Catalog="x";user id =y;password = z;");
苹果决定使用只在iOS9 IPV6,所以他们出版了一本有关IPv6的兼容性文档 - IPv6 Documentation
Xamarin的一篇博客这个太 - Making Your iOS Apps IPv6 Ready
我阅读了所有这些文档,但无法摆脱这种“商店拒绝”问题。
我想告诉你我最后的学尝试:(IPv4到IPv6)
string input = "10.0.0.1";
string ips = "";
IPAddress address;
if (IPAddress.TryParse(deviceIP, out address))
{
switch (address.AddressFamily)
{
case System.Net.Sockets.AddressFamily.InterNetwork:
// we have IPv4
ips = input;
break;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
// we have IPv6
IPAddress ip = IPAddress.Parse(input).MapToIPv6();
ips = "[" + ip.ToString() + "]";
break;
default:
//
break;
}
}
我用了MapToIPv6()
功能在Xamarin博客中,但同样我的应用程序被苹果拒绝。
我们的应用在IPv4上运行良好(苹果也这么说)。当Apple工程师关闭ipv4并仅使用ipv6时,我们的应用无法访问主机。
请帮我解决这个问题。
平台:Visual Studio的2015年与Xamarin的Windows 10 + Mac OS X的埃尔 - 匹
服务器上:仅在IPv4。
在评论中已经有一些有用的东西,但我认为你的主要问题是你有IPv4到IPv6映射的其他方式。您正在离开IPv4地址,并将IPv6地址映射到IPv6。
在固定的版本看看:
string input = "10.0.0.0";
string ips = "";
IPAddress address;
if (IPAddress.TryParse(input, out address))
{
switch (address.AddressFamily)
{
case System.Net.Sockets.AddressFamily.InterNetwork:
// we have IPv4, map it to IPv6
IPAddress ip = IPAddress.Parse(input).MapToIPv6();
ips = ip.ToString();
break;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
// we have IPv6, leave it as is
ips = input;
break;
}
}
看到自己,你可以去看看Reference Source。从那里你会看到在你的例子中AddressFamily
是InterNetworkV6
,所以MapToIPv6
方法只是返回IPAddress
,因为没有什么可以改变。
public IPAddress MapToIPv6()
{
if (AddressFamily == AddressFamily.InterNetworkV6)
{
return this;
}
// ...
}
但在你的代码,如果设备在IPv4上,然后翻译输入(ipv4)到ipv6? :: 10.0 .. ..] –
这实际上并不是关于设备的,在这个例子中,我们有一个IP地址“10.0.0.0”,它显然是一个IPv4地址,然后我们创建一个新的IPAddress类实例,使用输入并检查该IP的AddressFamily,所以我们不关心这个设备,只是我们的IP地址格式(输入),你可以看一下[IPAddress](http://referencesource.microsoft .com /#System/net/System/Net/IPAddress.cs,966bd1c3b2dc55c7)类,看看在创建该类的新实例时,AddressFamily是在构造函数中定义的。 – hankide
我认为apple IPv6服务器无法直接访问到IPv4地址,我认为ips应该转换为ipv 6。你同意吗? @hankide。顺便说一句Thaks很 –
它解决了吗?你不应该关心设备的AddressFamily,只关心远程IP AddressFamily。 IPAddress ip = IPAddress.Parse(input); Socket s = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
我用它,它的工作原理。
不幸未解决。我花了1周的时间来构建iOs应用程序,并花了4个坐骑来解决拒绝问题。但我无法解决它:( –
将您的服务器IP:10.0.0.0更改为域名,例如db.test.com,这是Apple推荐的方法。
string input = "db.test.com";
IPAddress[] ads = Dns.GetHostAddresses (input);
string ips = ads[0];
你实际使用IPv6寻址为你呈现IPv4的例子...... 10.0.0.1会2002:?0A00:0001 :: 0A00:0001/0:0:0:0:0:FFFF: 0A00:0001但是当然10.xxx是私有/内部网络地址......你能使用可以在ipv4和6中解析的主机名吗? – SushiHangover
你自己试过了吗?你确定SQLConnection与IPv6地址一起工作吗?最后,从移动客户端直接连接到数据库服务器通常被认为是**巨大的安全风险 – Jason
yeap。适用于ipv6的SQLConnce适用于微软文档。我们的地区没有ipv6的支持:) –