从iOS应用程序向SOAP ASMX服务发送参数

我想从iOS应用程序调用.NET ASMX服务。 我创建了这样的SOAP消息:

-(IBAction)submitButtonClicked:(id)sender { NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8080/NotificationService.asmx"]; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setRequestMethod:@"POST"]; [request addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8"]; [request addRequestHeader:@"SOAPAction" value:@"http://tempuri.org/HelloWorld"]; NSString *soapMessage = [NSString stringWithFormat: @"" "" "" "" "some device token" "azamsharp" "" "" ""]; NSString *messageLength = [NSString stringWithFormat:@"%d",[soapMessage length]]; [request addRequestHeader:@"Content-Length" value:messageLength]; [request appendPostData:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; [request setDelegate:self]; [request startAsynchronous]; } 

上面的代码可以工作,但正如您所看到的,我必须手动创建SOAP消息。 有没有办法只传递参数和方法名称,并自动创建肥皂体/消息。 StackOverFlow上有一个相同的场景示例,但我无法找到它。

假设您可以为您的服务生成WSDL,我建议您查看适用于iOS的WSDL2SOAP。 我在一个历史项目(2年多以前)中使用过它并且效果很好: –

http://code.google.com/p/wsdl2objc/

这是一个指向WSDL的应用程序,它会自动生成用于访问SOAP服务的类。 我不能保证它仍然可以工作,但我建议调查,因为它使SOAP处理变得容易。 请记住,库(除非最近更新)是ARC之前的,因此除了文档中的安装步骤之外,您还需要将其标记为适当的内存管理。