2016-08-24 46 views
0

私たちはRAD Studio 10.0 Seattleを使用して、Webサービス経由でデータを取得するiOSアプリケーションを構築しています。 Appleは2016年6月1日以降、すべてのアプリでIPv6をサポートする必要があるため、Appのアップデートは拒否されました。Delphi iOS IPv6 App Store拒否

WSDL Importerを使用して、RAD StudioでWebサービスクラスを作成し、Webサービスを呼び出します。アプリがIPv6ネットワークに接続すると、Socket Error #51 Network is unreachable...がスローされます。

この問題を解決する方法を知っている人はいますか?

+3

XE10はありません。 10.0シアトル、または10.1ベルリンを使用していますか?いずれにしても、Embarcaderoに問い合わせてください。おそらくIPv6サポートのための修正を提供する必要があります。それ以外の場合は、WebServiceフレームワークの使用をやめ、IPv6をサポートするIndyの 'TIdHTTPServer'など、独自のWebServiceをゼロから作成する必要があります。 –

+1

@Remy QuickReportsの作者は、「XE10」を使って最新バージョンを広く配布していたので、修正する必要があった。また、われわれが知っている限り、10.1ベルリンはすでに10.0シアトルにはなかった修正を導入しているかもしれない。 –

+0

修正のための@RemyLebeauに感謝します。私は10.0シアトルを使用しています。 Embarcaderoに連絡して、その問題が修正されているかどうかを確認します。 – Cheez

答えて

0

このFUNCを試してみてください:

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; 

あなたを追加 "IdStack" と "IdGlobal"

あなたが(たとえばwww.google.com)あなたのホストを渡す必要がありますを使用し、 funcは '['があるかどうかにかかわらず結果を返します。

さて、あなたはそれを使用する必要があります... 'のhttp://' +はGetHost( 'www.google.com')

あなたはIPv6ネットワーク内にある場合、最終的な文字列は

http://[www.google.com])になります
0

前の回答を使用して私はこのコードを思いつきました。私は完全な石鹸のURLを入力することができ、IPV6 URLの正しいIPV4を返します。使用セクションに「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; 
関連する問題