AFNetworking + SOAP Web服务

问题描述 投票:2回答:1

我有一个使用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];
iphone ios web-services soap afnetworking
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.