在iOS应用开发中,有时需要与服务器进行交互,获取或发送数据。本文主要讲解如何在iOS平台上使用SOAP接口调用Web服务。SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化的信息,常用于Web服务通信。
**方法一:使用WSDL2ObjC工具**
1. **获取WSDL文件**:你需要访问SOAP Web Service的WSDL(Web Services Description Language)定义。通常,WSDL文件可以通过在Web Service地址后添加`.wsdl`来获取,例如`http://xxx.xxx.asmx.wsdl`。
2. **保存WSDL文件**:将WSDL文件下载并保存,确保文件扩展名为`.wsdl`,例如`xxxxService.asmx.xml.wsdl`。
3. **转换为Objective-C类**:使用WSDL2ObjC工具,它可以将WSDL文件转换为Objective-C类,这些类可以直接在iOS项目中使用。转换后的类包含了调用Web Service接口所需的方法和模型对象。
4. **导入并使用生成的类**:将转换得到的OC类文件导入到你的Xcode项目中,然后就可以直接调用其中对应的方法来调用Web Service。以下是一个简单的调用示例:
```objc
- (NSString *)skHkshListOfpagenow2:(NSInteger)aPagenow pagesize:(NSInteger)aPagesize {
MURPXzshServiceSoapBinding *binding = [[MURPXzshServiceSoapBinding alloc]initWithAddress:@"http://yourwebserviceaddress"];
binding.logXMLInOut = YES;
MURPXzshService_HkshList *parm = [[MURPXzshService_HkshList alloc] init];
parm.xxxx = [umcid stringValue];
parm.pagenow = [NSNumber numberWithInteger:aPagenow];
parm.pagesize = [NSNumber numberWithInteger:aPagesize];
MURPXzshServiceSoapBindingResponse *resp = [binding HkshListUsingParameters:parm];
for (id mine in resp.bodyParts) {
if ([mine isKindOfClass:[MURPXzshService_HkshListResponse class]]) {
NSString *resultStr = [mine HkshListResult];
return resultStr;
}
}
return nil;
}
```
注意,`MURPXzshService`、`MURPXzshServiceSoapBinding`和`HkshList`等名称是具体的接口和服务方法名,需要根据实际的WSDL文件内容来替换。
**方法二:直接通过网络请求调用并解析XML**
如果你不希望或者不能使用WSDL2ObjC工具,也可以手动构建SOAP请求并解析响应的XML数据。以下是一个简单的例子:
```objc
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSString *webServiceBodyStr = [NSString stringWithFormat:@"<Jsjy_yjy xmlns=\"http://murpcn.com/murpwebservice/\"><xxx>34192</xxx><pagenow>1</pagenow><pagesize>20</pagesize></Jsjy_yjy>"];
NSString *webServiceStr = [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>%@</soap:Body></soap:Envelope>", webServiceBodyStr];
NSURL *url = [NSURL URLWithString:@"http://yourwebserviceaddress"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[webServiceStr length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:[webServiceStr dataUsingEncoding:NSUTF8StringEncoding]];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 配置XML解析器并处理解析结果
}
}];
[task resume];
}
```
在这个例子中,我们创建了一个SOAP请求,并通过NSURLSession发送POST请求。当接收到响应数据时,可以使用NSXMLParser来解析XML响应,获取需要的数据。
iOS调用SOAP接口有两种主要方式:一是利用WSDL2ObjC工具自动生成对应的Objective-C类,简化调用流程;二是手动构造SOAP请求,通过网络请求发送并解析XML响应。选择哪种方式取决于项目需求和个人偏好。在实际开发中,应根据项目的具体情况进行选择。