iphone ios web-services soap wsdl

Cómo acceder a los servicios SOAP desde iPhone



web-services wsdl (7)

Estoy planeando desarrollar una aplicación para el iPhone y esa aplicación tendría que acceder a un par de servicios SOAP. Mientras realizaba algunas comprobaciones básicas en el SDK del iPhone, no pude encontrar ningún soporte para acceder a los servicios SOAP, un poco de Google nos llevó a la conclusión de que no hay soporte para SOAP en el SDK del iPhone.

Entonces, si quiero construir esa aplicación, tendré que encontrar un método para acceder a los servicios SOAP desde el iPhone. ¿Cuál sería el mejor enfoque? ¿Alguna de las mejores prácticas? ¿Alguien ya escribió una biblioteca con la funcionalidad que está presente en el iPhone SDK para acceder a los servicios SOAP?

(Dado que el servicio al que necesito acceder está expuesto por otra parte y solo lo exponen como SOAP, desafortunadamente no es una opción para cambiar a otro tipo de interfaz (por ejemplo, API basada en REST).

Gero


Aquí hay un código de ejemplo de Swift 4 que ejecuta la llamada a la API utilizando el formato de servicio SOAP.

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() }


Echa un vistazo a este enlace y su hoja de ruta. Tienen RO | C en camino, y eso puede conectarse a sus servicios web, lo que probablemente incluye SOAP (uso la versión VCL que definitivamente lo incluye).


Eche un vistazo a gsoap que incluye dos ejemplos de iOS en el paquete de descarga bajo ios_plugin. La herramienta convierte WSDL en código para SOAP y XML REST.


Históricamente, he desarrollado mi propio acceso a un nivel bajo (generación de XML y análisis) para hacer frente a la necesidad ocasional de hacer solicitudes de estilo SOAP desde Objective-C. Dicho esto, hay una biblioteca disponible llamada SOAPClient ( soapclient ) que es de código abierto (licencia BSD) y disponible en Google Code ( mac-soapclient ) que puede ser de interés.

No doy fe de sus habilidades o efectividad, ya que nunca lo usé o tuve que trabajar con sus API, pero está disponible y puede proporcionarle una solución rápida según sus necesidades.

Apple tuvo, al mismo tiempo, una utilidad muy dañada llamada WS-MakeStubs. No creo que esté disponible en el iPhone, pero también podría interesarle una biblioteca de código abierto que pretende reemplazarlo: el código genera Objective-C para interactuar con un cliente SOAP. Nuevamente, no lo he usado, pero lo he marcado en mis notas: wsdl2objc


Mi solución fue hacer que un servidor proxy acepte REST, emitir la solicitud SOAP y devolver el resultado utilizando PHP.

Tiempo de implementación: 15-30 minutos.

No es el más elegante, pero sólido.


Puedes conectarte usando una herramienta que encontré 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];


Una palabra: no.

Está bien, obviamente eso no es una respuesta real. Pero aún así, el jabón debe evitarse a toda costa. ;-) ¿Es posible agregar un servidor proxy entre el iPhone y el servicio web? Tal vez algo que convierte REST en SOAP para ti?

Puede probar CSOAP , una biblioteca SOAP que depende de libxml2 (que se incluye en el SDK del iPhone).

He escrito mi propio framework SOAP para OSX. Sin embargo, no se mantiene de forma activa y requerirá algo de tiempo para conectarse al iPhone (para comenzar, deberá reemplazar NSXML con TouchXML )