【问题标题】:Delphi iOS IPv6 App Store RejectionDelphi iOS IPv6 App Store 拒绝
【发布时间】:2016-12-31 01:04:57
【问题描述】:

我们正在使用 RAD Studio 10.0 Seattle 构建一个通过 Web 服务获取数据的 iOS 应用程序。由于 Apple 从 2016 年 6 月 1 日起要求所有应用支持 IPv6,因此我们的应用更新已被拒绝。

我们正在使用 WSDL Importer 在 RAD Studio 中创建 Web 服务类,然后调用 Web 服务。当应用连接到 IPv6 网络时,它会抛出 Socket Error #51 Network is unreachable...

有人知道我们如何解决这个问题吗?

【问题讨论】:

  • 没有XE10。您使用的是 10.0 西雅图还是 10.1 柏林?在任何情况下,您都应该联系 Embarcadero 寻求帮助,他们可能必须提供 IPv6 支持的修复程序。否则,您可能不得不停止使用他们的 WebService 框架并从头开始编写自己的 WebService,例如使用支持 IPv6 的 Indy 的TIdHTTPServer
  • @Remy 我什至不得不纠正 QuickReports 的作者,因为他们在各地使用“XE10”广泛分发了他们的最新版本。此外,据我们所知,柏林 10.1 可能已经引入了西雅图 10.0 中没有的修复。
  • 感谢@RemyLebeau 的更正。我正在使用 10.0 西雅图。我们将尝试联系 Embarcadero,看看他们是否有解决方案。
  • @RemyLebeau 除了使用 TIdHTTPServer 重写之外,还有其他方法可以解决这个问题吗?使用 Rest API 代替 Web 服务怎么样?请指教。谢谢
  • @Cheez:我无法回答你的问题,因为我看不到 Embarcadero 的框架在内部做了什么,或者它是否可能已经在 10.1 Berlin 中得到解决。这就是为什么我建议您联系 Embarcadero 寻求支持。要么这是他们需要在西雅图修复的错误,要么可能已经有一个解决方案可用于将框架切换到 IPv6。

标签: ios delphi ipv6 delphi-10-seattle


【解决方案1】:

试试这个函数:

function GetHost(Host: String): Boolean;
begin
  result := '';
  try
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv6);
    result := '[' + Host + ']';
  except
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv4);
    result := Host;
  end;
end;

在您的Uses“IdStack”和“IdGlobal”中添加

您必须通过您的主机(例如 www.google.com)并且 func 返回带有或不带有“[”的结果。

现在,您必须使用它... 'http://' + getHost('www.google.com')

如果您在 IPV6 网络中,最终字符串将为 (http://[www.google.com])

【讨论】:

    【解决方案2】:

    使用上一个答案,我想出了这段代码,它对我有用。我可以输入完整的soap URL,它会返回正确的IPV4 或IPV6 URL。在使用部分中包含“idURI”。

    class function TPortalTools.GetRealUrl(Url: string): string;
    var
      IdURI: TIdURI;
    begin
      TIdStack.IncUsage;
      IdURI := TIdURI.Create(Url);
      try
        try
          GStack.ResolveHost(IdURI.Host, TIdIPVersion.Id_IPv6);
          IdURI.IPVersion := TIdIPVersion.Id_IPv6;
        except
          IdURI.IPVersion := TIdIPVersion.Id_IPv4; // Just in case.
        end;
    
        // Put it back together.
        Result := IdURI.GetFullURI([]);
      finally
        FreeAndNil(IdURI);
        TIdStack.DecUsage;
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多