Protocolo SOAP en iOS.

10 June 2010

Una de las funcionalidades más atractivas de las aplicaciones para iOS es poder tener la información actualizada en cualquier momento a través de Internet.

Para mantener la aplicación actualizada se puede optar para varios métodos de comunicación con un servidor, y uno de ellos es el protocolo SOAP.

En este post te vamos a mostrar un ejemplo de cómo se trabaja con servicios SOAP (suponiendo de que ya tienes los conocimientos básicos sobre el protocolo SOAP).

Aunque el iOS tiene ya API's preparadas para el SOAP , personalmente he encontrado más cómodo usar una libreria externa para usar SOAP o Web Services . La librería se llama ASIHTTPRequest.

Para usar dicha librería, descárgate las fuentes desde http://github.com/pokeb/asi-http-request/tarball/master e importala a tu proyecto de XCode.

Si no sabes cuál de los ficheros exactamente necesitas importar, asegurate que importas todos los de abajo:

  • ASIHTTPRequestConfig.h

  • ASIHTTPRequestDelegate.h

  • ASIProgressDelegate.h

  • ASIInputStream.h

  • ASIInputStream.m

  • ASIHTTPRequest.h

  • ASIHTTPRequest.m

  • ASINSStringAdditions.h

  • ASINSStringAdditions.m

  • ASIFormDataRequest.h

  • ASIFormDataRequest.m

  • ASINetworkQueue.h

  • ASINetworkQueue.m

  • ASIAuthenticationDialog.h

  • ASIAuthenticationDialog.m

  • Reachability.m

  • Reachability.h


Una vez importadps los ficheros , añade los siguientes frameworks a tu proyecto:

  • CFNetwork.framework



  • SystemConfiguration.framework

  • MobileCoreServices.framework

  • libz.1.2.3.dylib


Procedemos a crear la petición SOAP dentro de tu clase "PruebaSAOP".
[cpp] #import "PruebaSOAP.h"
#import "ASIHTTPRequest.h"

@implementation PruebaSOAP

-(void)startRequest{

//Creamos el Request
NSString *requestString = @""
     ""
  ""
       ""
            " "
       ""
"";

//Calculamos la longitud del request
NSString *msgLength = [NSString stringWithFormat:@"%d", [requestString length]];

//La URL del servicio
NSURL *url = [NSURL URLWithString:@"http://www.ejemplo.com/servicio.asmx"];

//Inicializamos el request
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

//Configuramos los Headers del Request
[request addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8"];
[request addRequestHeader:@"SOAPAction" value:@"http://www.ejemplo.com/consulta"];
[request addRequestHeader:@"Content-Length" value:msgLength];

//El Body del Request
[request setPostBody:(NSMutableData*)[requestString dataUsingEncoding:NSUTF8StringEncoding]];

//Indicamos quien es el delegado del Request
[request setDelegate:self];

//Ponemos en marcha el request
[request startSynchronous]; //tambien podrías usar [request startAsynchronous] si necesitas que el usuario de la app pueda hacer otras cosas mientras;
}[/cpp]
Al finalizar la petición , ASIHTTP te da le respuesta con:
[cpp]
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSString *responseString= [request responseString] ;
//o NSData *responseData = [request responseData];

}[/cpp]
Si se produce un error  ASIHTTP te avisa con:
[cpp]
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog(@"Error: %i - %@",[error code],[error localizedDescription]);
}
[/cpp]
Lo que te queda es hacer lo que necesitas con la respuesta del SOAP :)

Mas información sobre SOAP: http://www.w3.org/TR/soap/

Mas información sobre ASIHTTP: http://allseeing-i.com/ASIHTTPRequest/
Protocolo SOAP en  iOS.

Comentarios recientes

  • 10 June 2010
    Pablo dijo:

    ¡Muchas gracias por el ejemplo!

Deja un comentario

Escrito por:

Administrador

La antesala al desarrollo, Varios
iOSProtocolo SOAP

Utilizamos cookies propias y de terceros para mantener la sesión o sus preferencias, recopilar estadísticas y proporcionar contenidos conforme a sus intereses. Si continua navegando, utiliza los servicios de la web o pulsa el botón, está aceptando su instalación y el uso que hacemos de ellas. Puede obtener más información sobre como revocar su consentimiento o cómo cambiar la configuración en este enlace.