SOAP web service用AFNetWorking实现请求

问:

This is my current call to (asmx) SOAP web service:

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>"
     "<Save xmlns=\"http://www.myapp.com/\">"
     "<par1>%i</par1>"
     "<par2>%@</par2>"
     "<par3>%@</par3>"
     "</Save>"
     "</soap:Body>"
     "</soap:Envelope>", par1, par2, par3
     ];
NSURL *url = [NSURL URLWithString:@"http://....asmx"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]];

    [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request addValue: msgLength forHTTPHeaderField:@"Content-Length"];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        if([self.delegate respondsToSelector:@selector(myAppHTTPClientDelegate:didUpdateWithWeather:)]){
            [self.delegate myAppHTTPClientDelegate:self didUpdateWithWeather:responseObject];
        }         
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {            
        if([self.delegate respondsToSelector:@selector(myAppHTTPClientDelegate:self:didFailWithError:)]){
            [self.delegate myAppHTTPClientDelegate:self didFailWithError:error];
        }
    }];

    [operation start];

But I need to change this to use AFHTTPSessionManager.
I suppose that I need to use this:

UPDATE

NSDictionary *s_request = @{@"par1": [NSString stringWithFormat:@"%i", par1], @"par2": par2, @"par3": par3, @"par4": [NSString stringWithFormat:@"%i", par4], @"par5": par5};

    AFHTTPSessionManager* s_manager = [[AFHTTPSessionManager alloc] init];

    [s_manager POST:@"http://192.168.10.26/mywebservice/myservice.asmx?op=MethodName" parameters:s_request success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"DONE!");
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"FAILED %@, %@", [error localizedDescription], [error localizedFailureReason]);
    }];


This code always fail. Getting error 500. Do I just need to add method URL or I need to add complete soap message somewhere. What I miss here?




答:

You need to pass parameter in Dictionary like in the following example:

NSDictionary *request = @{@"email": self.email.text, @"password": self.password.text};
[manager POST:login parameters:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
  NSLog(@"DONE!");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Failed to log in: %@", operation.responseString);
}];




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值