2016-08-24 123 views
0

我們使用RAD Studio 10.0 Seattle來構建一個通過Web服務獲取數據的iOS應用程序。由於蘋果要求所有應用程序從2016年6月1日起支持IPv6,因此我們的應用更新已被拒絕。Delphi iOS IPv6 App Store拒絕

我們使用WSDL導入程序在RAD Studio中創建Web服務類,然後調用Web服務。當應用程序連接到IPv6網絡時,會拋出一個Socket Error #51 Network is unreachable...

有誰知道我們如何解決這個問題?

+3

沒有XE10。你在使用10.0西雅圖還是10.1柏林?無論如何,您應該聯繫Embarcadero尋求幫助,他們可能需要提供IPv6支持的修復。否則,您可能不得不停止使用他們的WebService框架並從頭開始編寫自己的WebService,例如使用支持IPv6的Indy的「TIdHTTPServer」。 –

+1

@Remy我甚至不得不糾正QuickReports的作者,因爲他們已經在全國各地廣泛使用「XE10」發佈了他們的最新版本。另外,據我們所知,10.1柏林可能已經引入了一個不在10.0西雅圖的補丁。 –

+0

感謝@RemyLebeau的更正。我正在使用10.0西雅圖。我們將嘗試聯繫Embarcadero,看看他們是否有解決辦法。 – Cheez

回答

0

嘗試使用本功能:

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; 
相關問題