SOAP web service用AFNetWorking实现请求
问:
This is my current call to (asmx) SOAP web service:
NSString *soapMessage = [NSString stringWithFormat: @"<?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>" "<Save xmlns=\"http://www.myapp.com/\">" "<par1>%i</par1>" "<par2>%@</par2>" "<par3>%@</par3>" "</Save>" "</soap:Body>" "</soap:Envelope>", par1, par2, par3 ]; NSURL *url = [NSURL URLWithString:@"http://....asmx"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]]; [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.responseSerializer = [AFXMLParserResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { if([self.delegate respondsToSelector:@selector(myAppHTTPClientDelegate:didUpdateWithWeather:)]){ [self.delegate myAppHTTPClientDelegate:self didUpdateWithWeather:responseObject]; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if([self.delegate respondsToSelector:@selector(myAppHTTPClientDelegate:self:didFailWithError:)]){ [self.delegate myAppHTTPClientDelegate:self didFailWithError:error]; } }]; [operation start];
But I need to change this to use
AFHTTPSessionManager
.I suppose that I need to use this:
UPDATE
NSDictionary *s_request = @{@"par1": [NSString stringWithFormat:@"%i", par1], @"par2": par2, @"par3": par3, @"par4": [NSString stringWithFormat:@"%i", par4], @"par5": par5}; AFHTTPSessionManager* s_manager = [[AFHTTPSessionManager alloc] init]; [s_manager POST:@"http://192.168.10.26/mywebservice/myservice.asmx?op=MethodName" parameters:s_request success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"DONE!"); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"FAILED %@, %@", [error localizedDescription], [error localizedFailureReason]); }];This code always fail. Getting error
500
. Do I just need to add method URL or I need to add complete soap message somewhere. What I miss here?
答:
You need to pass parameter in Dictionary like in the following example:
NSDictionary *request = @{@"email": self.email.text, @"password": self.password.text}; [manager POST:login parameters:request success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"DONE!"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Failed to log in: %@", operation.responseString); }];