我想从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:
@"<?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>"
"<Greet xmlns=\"http://tempuri.org/\">"
"<deviceToken>some device token</deviceToken>"
"<userName>azamsharp</userName>"
"</Greet>"
"</soap:Body>"
"</soap:Envelope>"];
NSString *messageLength = [NSString stringWithFormat:@"%d",[soapMessage length]];
[request addRequestHeader:@"Content-Length" value:messageLength];
[request appendPostData:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[request setDelegate:self];
[request startAsynchronous];
}
上面的代码可以正常工作,但正如您所看到的,我必须手动创建SOAP消息。有没有办法只传入参数和方法名称,并自动创建soap正文/消息。 StackOverFlow上有一个示例用于相同的场景,但我无法找到它。
答案 0 :(得分:0)
假设您可以为您的服务生成WSDL,我建议您查看适用于iOS的WSDL2SOAP。我在一个历史项目(2年多以前)中使用过它并且效果很好: -
http://code.google.com/p/wsdl2objc/
这是一个指向WSDL的应用程序,它会自动生成用于访问SOAP服务的类。我不能保证它仍然可以工作,但我建议调查,因为它使SOAP处理变得容易。请记住,库(除非最近更新)是ARC之前的,因此除了文档中的安装步骤之外,您还需要将其标记为适当的内存管理。