AF网络+SOAP web服务



我有一个应用程序使用ASIHttpRequest消费SOAP Web服务,现在我想(或必须)使用其他网络框架,我选择了AFNetworking,但看不出我该如何消费SOAP,她就是我如何使用ASIHttpRequest:

NSString *operation=[NSString stringWithString:@"search_service"];
NSString *xmlNamespace=[NSString stringWithString:@"http://www.xxx.com/wsdl"];
NSString *address=[NSString stringWithString:@"http://www.xxx.com/service"];
NSString *parameters=[NSString stringWithFormat:@"<param1>%@</param1><param2>%@</param2>",
                      @"val1",
                      @"val2",
                      ];
NSString *operatorTag = [NSString stringWithFormat:@"<%@ xmlns="%@">%@</%@>n", operation, xmlNamespace, parameters, operation];
NSString *soapMessage = [NSString stringWithFormat:
                         @"<?xml version="1.0" encoding="utf-8"?>n"
                         "<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">n"
                         "  <s:Header>n"
                         "    <To xmlns="http://www.w3.org/2005/08/addressing">%@</To>n"
                         "    <a:Action>http://tempuri.org/IService1/%@</a:Action>n"
                         "  </s:Header>n"
                         "  <s:Body>n"
                         "    %@"
                         "  </s:Body>n"
                         "</s:Envelope>n", address, operation, operatorTag
                         ];
asiRequest = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:address]];
[asiRequest setDelegate:self];
[asiRequest addRequestHeader:@"application/soap+xml; charset=utf-8" value:@"Content-Type"];
[asiRequest setRequestMethod:@"POST"];
[asiRequest setPostBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[asiRequest startAsynchronous];

编辑:这就是我尝试的AFNetworking:

NSString *operationWSDL= @"search_service";
NSString *xmlNamespace= @"http://www.xxx.com/wsdl";
NSString *address= @"http://www.xxx.com/service";
NSString *parameters=[NSString stringWithFormat:@"<param1>%@</param1><param2>%@</param2>",@"val1",@"val2",];

NSString *operatorTag = [NSString stringWithFormat:@"<%@ xmlns="%@">%@</%@>n", operationWSDL, xmlNamespace, parameters, operationWSDL];
NSString *soapMessage = [NSString stringWithFormat:
                         @"<?xml version="1.0" encoding="utf-8"?>n"
                         "<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">n"
                         "  <s:Header>n"
                         "    <To xmlns="http://www.w3.org/2005/08/addressing">%@</To>n"
                         "    <a:Action>http://tempuri.org/IService1/%@</a:Action>n"
                         "  </s:Header>n"
                         "  <s:Body>n"
                         "    %@"
                         "  </s:Body>n"
                         "</s:Envelope>n", address, operationWSDL, operatorTag
                         ];
NSURL *url = [NSURL URLWithString:@"http://www.xxx.com/service"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
    [formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"application/soap+xml; charset=utf-8",@"Content-Type", nil] body:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation start];

您尝试过WSDL2Objc吗?http://code.google.com/p/wsdl2objc/.我最近在我的项目中使用了它。它成功地生成了类(从使用的WSDL)来使用SOAP服务。我认为这将是更好的解决方案。

相关内容

最新更新