2016-08-24 5 views
0

우리는 RAD Studio 10.0 Seattle을 사용하여 웹 서비스를 통해 데이터를 가져 오는 iOS App을 구축하고 있습니다. Apple은 모든 앱이 2016 년 6 월 1 일부터 IPv6를 지원해야하므로 앱 업데이트가 거부되었습니다.Delphi iOS IPv6 App 스토어 거부

우리는 WSDL 임포터을 사용하여 RAD Studio에서 웹 서비스 클래스를 만든 다음 웹 서비스를 호출합니다. 앱이 IPv6 네트워크에 연결되면 Socket Error #51 Network is unreachable...이 표시됩니다.

누구든지이 문제를 해결할 수있는 방법을 알고 있습니까?

+3

XE10이 없습니다. 10.0 시애틀이나 10.1 베를린을 사용하고 있습니까? 어쨌든 엠바 카데로에 도움을 요청하면 아마 IPv6 지원에 대한 수정을 제공해야 할 것입니다. 그렇지 않으면, WebService 프레임 워크의 사용을 중단하고, IPv6를 지원하는 Indy의'TIdHTTPServer'와 같이 자신 만의 WebService를 처음부터 작성할 수 있습니다. –

+1

@Remy QuickReports의 저자는 "XE10"을 사용하여 최신 버전을 널리 배포했기 때문에이를 수정해야했습니다. 또한, 우리 모두가 알다시피, 10.1 베를린은 10.0 시애틀에 없었던 문제를 이미 도입했을 수도 있습니다. –

+0

@RemyLebeau에게 감사의 말을 전합니다. 10.0 시애틀을 사용하고 있습니다. 우리는 엠바 카데로에 연락하여 그 문제를 해결할 수 있는지 알아볼 것입니다. – 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는 : //'당신이 IPv6 네트워크에있는 경우 + gethost를 ('www.google.com')

최종 문자열이 될 것입니다 (http://[www.google.com])

0

이전 답변을 사용하여이 코드를 작성했습니다.이 코드는 저에게 효과적입니다. 전체 비누 URL을 입력 할 수 있으며 IPV6 URL의 올바른 IPV4를 반환합니다. uses 섹션에 '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;