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
'codememo' 카테고리의 다른 글
| PowerShell에서 디렉토리 변경 (0) | 2023.04.18 |
|---|---|
| WPF에서 여러 스타일을 적용하는 방법 (0) | 2023.04.18 |
| SQL Server:잘못된 열 이름 (0) | 2023.04.18 |
| dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier : forIndexPath를 사용하는 경우 (0) | 2023.04.18 |
| 라디오 버튼이 JQuery에서 확인되었는지 확인합니다. (0) | 2023.04.18 |