如何将AFNetworking服务调用转换为使用AFHTTPSessionManager [英] How to convert AFNetworking service invoke to use AFHTTPSessionManager

查看:263
本文介绍了如何将AFNetworking服务调用转换为使用AFHTTPSessionManager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我当前对(asmx)SOAP Web服务的调用:

  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>
<保存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]];

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

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

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

[操作开始];

但我需要更改此项以使用 AFHTTPSessionManager

我想我需要使用它:

  [操作POST:<# (NSString *)#>参数:其中#(ID)#> constructBodyWithBlock:<#^(id< AFMultipartFormData> formData)block#>成功:<#^(NSURLSessionDataTask * task,id responseObject)成功#>失败:<#^(NSURLSessionDataTask *任务,NSError *错误)失败#>] 

但是我不清楚应该设置什么参数?



更新

  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参数:s_request成功:^(NSURLSessionDataTask * task,id responseObject){
NSLog(@DONE!);
}失败:^(NSURLSessionDataTask *任务,NSError *错误){
NSLog(@FAILED%@,%@,[error localizedDescription],[error localizedFailureReason]);
}];

此代码始终失败。获取错误 500 。我只需要添加方法URL,或者我需要在某处添加完整的soap消息。我想念的是什么?

解决方案

您需要在Dictionary中传递参数,如下例所示:

  NSDictionary * request = @ {@email:self.email.text,@password:self.password.text}; 
[经理POST:登录参数:请求成功:^(AFHTTPRequestOperation *操作,id responseObject){
NSLog(@DONE!);
}失败:^(AFHTTPRequestOperation *操作,NSError *错误){
NSLog(@登录失败:%@,operation.responseString);
}];


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:

[operation POST:<#(NSString *)#> parameters:<#(id)#> constructingBodyWithBlock:<#^(id<AFMultipartFormData> formData)block#> success:<#^(NSURLSessionDataTask *task, id responseObject)success#> failure:<#^(NSURLSessionDataTask *task, NSError *error)failure#>]

But I am not clear about what parameters should I set?

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);
}];

这篇关于如何将AFNetworking服务调用转换为使用AFHTTPSessionManager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆