我坚持使用SOAP集成项目。我需要从iPad应用程序调用一些SOAP Web服务。
我有WSDL,我需要生成Objective-C类来调用服务调用。
Mac开发人员库有一个"Example: Calling a SOAP Operation with HTTP Authentication",但它链接到的示例代码已损坏(SOAP_AuthExample.dmg, 404)。
Web Services Core Programming Guide甚至说(重点补充):
"目前,OS X 不提供高级支持,用于从WSDL文件中提取SOAP函数。但是,您可以使用NSXMLParser从URL将WSDL文件读入内存。然后,在文件中搜索特定方法名称或查找与服务相关联的URL相对简单。通过更多的努力,您可以提取方法名称,数据类型和参数名称来构建SOAP调用。然后,您可以使用Web Services Core框架进行SOAP调用并解析响应。"
我还发现了以下三台发电机;然而,第一个是关于一些丢失文件的错误,第二个代码在我尝试构建时产生并且无休止的ARC错误(并且重构器不起作用),第三个是paywalled。
有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:2)
几个月前我遇到了同样的情况,我目前正在使用需要连接到SOAP服务的iPad应用程序。我已经有了这些课程,但它们特定于我的项目,我无权分享。但是,我正在制作一个更通用的Objective-C类(无论如何是所有SOAP服务器的最终解决方案),以便与Github上的世界共享它。
首先,您必须设置SOAP消息。它有一个像这样的共同结构:
<?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:Header>
// here comes the header information: credentials, connection information. If needed, of course
</soap:Header>
<soap:Body>
// here comes the request parameters. In my case, these parameters are related to a resource called SOAPAction (That identifies the method to be called. e.g getListOfClients). I don't know if it is the same in all servers
</soap:Body>
</soap:Envelope>
我告诉你,我正在制作应用程序的公司为我提供了方法和身份验证信息。我不知道这是不是你的情况,但你在这里一瞥一下该做什么。
我使用AFNetworking
以这种方式发送请求:
NSString *messageLength = [NSString stringWithFormat:@"%lu", (unsigned long)[msg length]];
NSURL *requestURL = [NSURL URLWithString:self.requestURL];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:requestURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30];
[theRequest addValue:[requestURL host] forHTTPHeaderField:@"Host"];
[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:soapAction forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue:messageLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[msg dataUsingEncoding:NSUTF8StringEncoding]];
// sending the request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:theRequest];
operation.responseSerializer = [AFHTTPResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *xml = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Take the data master Yoda: %@", xml);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Bad SOAP server!. Error: %@", error.description)
}];
[[NSOperationQueue mainQueue] addOperation:operation];
显然, self.requestURL
是服务器URL。如果请求成功,那么您已准备好解析服务器的xml响应。如果不是,否则请求错误描述。
此页面帮助我找到了解决我遇到的一些问题的解决方案,并且它与您在上面引用的网站http://sudzc.com/相关:
http://blog.exadel.com/working-with-ios-and-soap/
我希望这会有所帮助。