在递归 POST 调用 AFNetworking 后获得连续 "The operation couldn’t be completed"

Getting continous "The operation couldn’t be completed" after recursive POST call AFNetworking

我正在以递归方式调用 POST Json 网络服务以持续 Upload/download 数据服务,直到全部完成。可能有多达 500-1000 个请求。但在使用一段时间后,我不断收到以下错误。 -1012 是我最常得到的。

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x7ae056b0 {NSErrorFailingURLKey=https://api.XXX.com/XXX/XXX/, NSErrorFailingURLStringKey=https://api.XXX.com/XXX/XXX/}


Error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo=0x7ba8e5b0 {NSErrorFailingURLStringKey=, _kCFStreamErrorCodeKey=57, NSErrorFailingURLKey=, NSLocalizedDescription=The network connection was lost., _kCFStreamErrorDomainKey=1, NSUnderlyingError=0x7a6957e0 "The network connection was lost."}

我在下面提到 post 说它只发生在 iOS8 但我同时在 iOS7 和 iOS8 以及两个 Device/Simulator 和 Wifi/Lan

Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

以下是我在方法中的使用方法

-(void) callService {
    //counter list variable is already initialized earlier
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:   
         [NSURL URLWithString:@"https://url.com/url"]];
    NSDictionary *params = @{@"id": counter,
                     @"data": [list objectAtIndex:counter]};
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
    path:@"http://url.com/url/url1/" parameters:params];
    AFJSONResponseSerializer *operation = [[AFJSONResponseSerializer 
           alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation 
        *operation, id responseObject) {
        //Process Data
        counter++;
        [self callService];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
        counter++;
        if(error.code == -1012 || error.code == -1005) {
            [self performSelector:@selector(callService) withObject:nil 
              afterDelay:5];
        } else {
            [self callService];
        }
    }];
    [operation start];
} 

在这种情况下,即使从服务器端关闭连接也有帮助。

得到解决方案

升级到 AFNetworking 2.5.3,现在我得到的错误代码非常少,如 -1005、-1012... 并且后续请求已正确执行。目前还使用服务器端的连接关闭。 将尝试与此一起使用 keep alive 并分享我的观察结果。

感谢 Rob 的建议。