NSURLConnection丢失了数据

时间:2013-10-11 19:54:13

标签: objective-c xml magento soap nsurlconnection

我需要通过SOAP请求与服务器通信并获得响应。我有很好的方法,用参数创建XML请求,将其转换为NSMutableURLRequest并使用NSURLConnection发送。所有这些工作正常,所以我将跳过这部分代码。我的服务器是一种Magento商店,所以我收到不同数量的数据取决于我使用的请求。当我得到会话ID之类的简短回复时,一切都很完美,但是当响应时间较长时(例如国家列表),我的数据会以某种方式丢失。我通过比较didReceiveResponse和didReceiveData

中的数据长度来检查它
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    self.expectedLength = response.expectedContentLength;
    self.downloadedLength = 0;
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"Data recived");
    self.downloadedLength = self.downloadedLength + [data length];
    [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
        if (self.downloadedLength == self.expectedLength) {
            NSLog(@"correctly downloaded");
        }
        else{
            NSLog(@"sizes don't match");
        }

        str = [[NSString alloc] initWithBytes:[receivedData bytes] length:[receivedData length] encoding:NSISOLatin1StringEncoding];

        NSData *tmp_Data = [[NSData alloc] initWithData:[str dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:YES]];

        parser = [[SYXmlParser alloc]initWithData:tmp_Data];

        [parser startParser];

        if([parser theDataArray] != nil && [[parser theDataArray]count] != 0)
        {
            resultArray = [[NSMutableArray alloc]initWithArray:[parser theDataArray]];
            [self performSelectorOnMainThread:@selector(loadFinished) withObject:nil waitUntilDone:YES];
        }

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

当响应很长时,我得到了切割XML并且我的比较返回“大小不匹配”。 XML并没有明确地削减一半,但是文本中间缺少数据,就像一些字符缺失一样。这个问题每次都以相同的方式在同一个地方重复,所以它不是随机的。我尝试使用AFNetworking来解决这个问题,但我认为我无法正确使用它来处理这个SOAP请求。我会感激每一个能解决这个问题的主张。

编辑:

我用过这个查尔斯,但是和xcode有同样的问题。当我打开响应选项卡和SOAP选项卡时,响应为空,在XML选项卡上有一个错误,Charles无法解析此接收的数据,但在概述选项卡中,响应大小为4666字节。这是否意味着服务器给出了错误的响应?我无法相信它,因为它的商业服务器Magento与许多其他语言一起使用并且有效。

0 个答案:

没有答案