codememo

iPhone에서 SOAP 서비스에 액세스하는 방법

tipmemo 2023. 4. 18. 22:47
반응형

iPhone에서 SOAP 서비스에 액세스하는 방법

저는 아이폰용 앱을 개발할 예정인데, 그 앱은 몇 가지 SOAP 서비스에 접속해야 합니다.iPhone SDK에서 기본적인 체크를 하고 있을 때 SOAP 서비스에 대한 지원을 찾을 수 없었습니다.Googling을 조금 해보면 iPhone SDK에서는 SOAP을 지원하지 않는다는 결론이 나옵니다.

그래서 그 앱을 만들고 싶다면 아이폰에서 SOAP 서비스에 접속하는 방법을 생각해내야 합니다.어떤 접근법이 가장 좋을까요?베스트 프랙티스가 있나요?누군가가 이미 iPhone SDK에 있는 SOAP 서비스에 액세스하기 위한 기능을 사용하여 라이브러리를 작성했습니까?

(접근해야 할 서비스는 다른 당사자에 의해 공개되고 SOAP로만 공개되기 때문에 유감스럽게도 다른 유형의 인터페이스(REST 기반 API 등)로 전환하는 옵션은 아닙니다.

게로

한 단어:하지 마.

좋아, 확실히 그건 진짜 답이 아니야.그러나 SOAP는 반드시 피해야 합니다.;-) iPhone과 웹 서비스 사이에 프록시 서버를 추가할 수 있습니까?REST를 SOAP으로 바꿀 수 있는 것이 있을까요?

CSOAP는 libxml2(iPhone SDK에 포함되어 있음)에 의존하는 SOAP 라이브러리입니다.

OSX용 SOAP 프레임워크를 작성했습니다.그러나 현재 유지 관리되지 않으며 iPhone으로 포팅하는 데 시간이 걸립니다(시작하려면 NSXML을 TouchXML로 교체해야 함).

저의 해결책은 프록시 서버에서 REST를 받아들여 SOAP 요청을 발행하고 PHP를 사용하여 결과를 반환하는 것이었습니다.

구현 시간: 15~30분

가장 우아하지는 않지만, 견고합니다.

지금까지 Objective-C로부터의 SOAP 스타일 요구에 대응하기 위해 낮은 레벨(XML 생성 및 구문 분석)에서 독자적인 액세스를 롤링해 왔습니다.즉, SOAPClient(soapclient)라고 하는 라이브러리는 오픈 소스(BSD 라이선스)이며 Google Code(mac-soapclient)에서 사용할 수 있습니다.

API를 사용한 적도 없고 작업한 적도 없기 때문에 기능이나 유효성은 증명하지 않지만, 필요에 따라 이용 가능하며 빠른 솔루션을 제공할 수도 있습니다.

한때 애플은 WS-MakeStubs라고 불리는 매우 고장난 유틸리티를 가지고 있었다.iPhone에서는 이용할 수 없다고 생각합니다만, SOAP 클라이언트와 대화하기 위한 코드를 생성하는 Objective-C를 대체하는 오픈 소스 라이브러리에도 관심이 있을지도 모릅니다.다시 말씀드리지만 사용하지 않았습니다만, 노트에는 마크가 붙어 있습니다.wsdl2objc

http://www.wsdl2code.com에서 찾은 도구를 사용하여 연결할 수 있습니다.

SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR
        URL" AndDelegate:self];

[proxy GetDouble];
[proxy GetEnum];
[proxy getEnum:kTestEnumTestEnum2];
[proxy GetInt16];
[proxy GetInt32];
[proxy GetInt64];
[proxy GetString];
[proxy getListStrings];

SOAP 서비스 포맷을 사용하여 API 호출을 실행하는 Swift 4 샘플 코드입니다.

   func callSOAPWSToGetData() {

        let strSOAPMessage =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                "<soap:Body>" +
                "<CelsiusToFahrenheit xmlns=\"http://www.yourapi.com/webservices/\">" +
                "<Celsius>50</Celsius>" +
                "</CelsiusToFahrenheit>" +
                "</soap:Body>" +
        "</soap:Envelope>"

        guard let url = URL.init(string: "http://www.example.org") else {
            return
        }
        var request = URLRequest.init(url: url)
        let length = (strSOAPMessage as NSString).length
        request.addValue("application/soap+xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.addValue("http://www.yourapi.com/webservices/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
        request.addValue(String(length), forHTTPHeaderField: "Content-Length")
        request.httpMethod = "POST"
        request.httpBody = strSOAPMessage.data(using: .utf8)

        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)
        let task = session.dataTask(with: request) { (data, response, error) in
            guard let responseData = data else {
                print("Error: did not receive data")
                return
            }
            guard error == nil else {
                print("error calling GET on /todos/1")
                print(error ?? "")
                return
            }
            print(responseData)
            let strData = String.init(data: responseData, encoding: .utf8)
            print(strData ?? "")
        }
        task.resume()
    }

링크와 로드맵을 참조해 주십시오.그들은 RO|C를 가지고 있으며, 그것은 SOAP를 포함한 웹 서비스에 접속할 수 있습니다(저는 반드시 SOAP를 포함하는 VCL 버전을 사용합니다).

다운로드 패키지의 ios_plugin 아래에 2개의 iOS 예가 포함되어 있는 gsoap을 참조하십시오.이 툴은 WSDL을 SOAP 및 XML REST 코드로 변환합니다.

언급URL : https://stackoverflow.com/questions/204465/how-to-access-soap-services-from-iphone

반응형