【问题标题】:How to convert AFNetworking service invoke to use AFHTTPSessionManager如何将 AFNetworking 服务调用转换为使用 AFHTTPSessionManager
【发布时间】:2014-08-02 15:03:32
【问题描述】:

这是我当前对 (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>"
     "<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];

但我需要将其更改为使用AFHTTPSessionManager
我想我需要使用这个:

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

但是我不清楚应该设置哪些参数?

更新

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

此代码总是失败。收到错误500。我只需要添加方法 URL 还是需要在某处添加完整的肥皂消息。我在这里想念什么?

【问题讨论】:

    标签: objective-c ios7 afnetworking afnetworking-2 nsurlsession


    【解决方案1】:

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

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

    【讨论】:

    • 那再次使用AFHTTPRequestOperation。我需要AFHTTPSessionManager 的例子
    • 和你在操作中传递参数一样,你也可以在会话管理器中传递:raywenderlich.com/59255/afnetworking-2-0-tutorial(Check会话管理器)
    • login 中的POST:login 是什么?
    • login 是变量,其中包含要发布的 url,就像我一样,它是 login.php
    • 我已经更新了一些细节问题,请您检查一下。
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多