37 votes

Consommez un service Web WCF en utilisant Objective-C sur iPhone

Je rencontre des difficultés à consommer un service web WCF très simple (Hello World) dans mon application iPhone. D'après ce que j'ai lu, vous devez créer manuellement le message de requête puis l'envoyer à l'URL du service web.

J'ai réussi à le faire sur un service web .asmx, mais pas avec un service WCF.

Comment savoir le format correct du message SOAP de requête?

Le service web que j'essaie d'atteindre a un format de: http://xxx.xxx.xxx.xxx:PORT/IService1/ (exécuté localement dans une machine virtuelle)

Je m'excuse pour le manque d'informations, je suis un peu perdu.

Toute aide est grandement appréciée.

46voto

JWD Points 5696

Merci à tous ceux qui ont aidé ici. J'ai fini par trouver la solution et j'ai pensé partager mes résultats. Je sais que ce n'est pas une solution exhaustive, donc n'hésitez pas à m'envoyer un message ou un commentaire si vous avez besoin de plus de détails.

//Variables utilisées
NSMutableData *webData;
NSMutableString *soapResults;
NSXMLParser *xmlParser;
BOOL recordResults;

//Appel de service Web
NSString *soapMessage = [NSString stringWithFormat:
@"\n"
" \n"
" \n"
"JACKSONPASSWORD"
" \n"
" \n"
""];

NSURL *url = [NSURL URLWithString:@"http://172.16.0.142:8731/Service1/"];               
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];             
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];          
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];       
[theRequest addValue: @"http://tempuri.org/IService1/Login" forHTTPHeaderField:@"Soapaction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];     
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

if(theConnection) {
    webData = [[NSMutableData data] retain];
}
else {
    NSLog(@"theConnection is NULL");
}

//Mise en place des protocoles NSURL et XMLParser
#pragma mark -
#pragma mark Méthodes de NSURLConnection

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

#pragma mark -
#pragma mark Méthodes de XMLParser

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
 namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName
   attributes:(NSDictionary *)attributeDict 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
 namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName

10voto

Lounges Points 3745

Personnellement, je recommanderais d'ajouter un point de terminaison basé sur REST pour le service WCF. Vous pouvez le faire tourner simultanément avec le SOAP et c'est BEAUCOUP plus facile à consommer du côté iPhone.

http://msdn.microsoft.com/fr-fr/library/dd203052.aspx

2voto

Mehmet Aras Points 3901

Quel genre d'erreur obtenez-vous lorsque vous accédez à notre service WCF? Donc asmx fonctionne mais pas WCF? Une chose à laquelle vous devez faire attention est que dans .NET 2.0, les services web (asmx) prenaient en charge à la fois les messages SOAP 1.1 et SOAP 1.2. Cependant, basicHttpBinding dans WCF ne prend en charge que SOAP 1.1. Donc si vous envoyez des messages SOAP 1.2 depuis votre client iPhone vers le service WCF avec basicHttpBinding, c'est probablement le problème que vous rencontrez. Pour prendre en charge SOAP 1.2, vous devez utiliser wsHttpBinding ou créer une liaison personnalisée qui ressemble à basicHttpBinding mais vous spécifiez que la version du message doit être SOAP 1.2.

1voto

yasirmturk Points 935

Caged / httpriot Bibliothèque HTTP Rest simple pour iPhone et projets Cocoa.

0voto

Chris Porter Points 2394

Avez-vous essayé d'accéder au service WCF en tant que service Web depuis un client Windows? Je n'ai pas configuré WCF pour fonctionner comme un service Web de style asmx mais je crois qu'il y a des paramètres spécifiques à ajuster pour que WCF se comporte de cette manière. Travailler avec un client Windows éliminerait tout problème lié à l'iphone pour des fins de test et vous aiderait à restreindre vos tests au service lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X