2014-12-18 3 views
0

웹 서비스가 있습니다. 서버에 접속하면 응답을 얻기 위해 거의 1 분 이상 걸립니다. 50 초 안에 응답이 null 인 시뮬레이터에서 앱을 실행할 때. 몇 분 더 기다리지 않습니다. 내 코드는 아래에 나와 있습니다.NSURLConnection 시간 초과

- (void)functionCalling 
{ 
    functionName = @"productList"; 
    baseURL = [NSString stringWithFormat:@"http://192.168.0.13/dashly-server/mobile/ Magento-IOS/lib.php?functionName=%@",functionName]; 
    NSLog(@"%@",dateSelect); 
    NSString *baseString = [NSString stringWithFormat:@"&store_url=%@&api_username=%@&api_key=%@&fromDate=%@&toDate=%@",store_url, api_username, api_key, fDate, tDate]; 
    NSString *completeURL3 = [baseURL stringByAppendingString:baseString]; 
    NSURL *url3 = [NSURL URLWithString:[completeURL3 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    NSLog(@"url is %@", url3); 
    //NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url3]; 
    NSMutableURLRequest *theRequest=[[NSMutableURLRequest alloc] 
            initWithURL:url3 
            cachePolicy:NSURLRequestReloadIgnoringCacheData 
            timeoutInterval:180.0]; 

    theConnection3 = [NSURLConnection connectionWithRequest:theRequest delegate:self]; 
    NSLog(@"connection = %@",theConnection3); 
    if(theConnection3) 
    { 
      //webData = [NSMutableData dataWithData:[completeURL1 dataUsingEncoding:NSUTF8StringEncoding]]; 
      webData = [NSMutableData dataWithContentsOfURL:url3]; 
      theRequest.HTTPBody = webData; 
      NSLog(@"web response data %@", webData); 
      NSString *response3 = [[NSString alloc]initWithData:webData encoding:NSUTF8StringEncoding]; 
      NSLog(@"response products = %@", response3); 
    } 
    else 
    { 
      NSLog(@"theConnection is NULL"); 
    } 

} 
#pragma mark 
#pragma mark Actions - NSURLConnection Methods 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [self->webData setLength:0]; 
} 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [self->webData appendData:data]; 
} 
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"%@" , error); 

} 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSError *error; 
    NSString *resStr = [[NSString alloc]initWithData:webData encoding:NSASCIIStringEncoding]; 
    NSLog(@"dash response = %@", resStr); 
    if ([resStr isEqualToString:@"null"]) { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"No Products Today..." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
     [alert show]; 
    } 
    else if ([resStr length]==0) 
    { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Web services connection failed..." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
     [alert show]; 
    } 
    else 
    { 
     id jsonObject3 = [NSJSONSerialization JSONObjectWithData:webData options:kNilOptions error:&error]; 
     NSArray *array = (NSArray *)jsonObject3; 
     for(int i=0;i<[array count];i++) 
     { 
      dict = [array objectAtIndex:i]; 
      [productIdArray addObject:[dict objectForKey:@"productId"]]; 
      [productNameArray addObject:[dict objectForKey:@"name"]]; 
      [ordersArray addObject:[dict objectForKey:@"nooforders"]]; 
      [priceArray addObject:[dict objectForKey:@"price"]]; 

     } 
     NSLog(@"product id array %@", productIDArray); 
     NSLog(@"name array %@", productNameArray); 
     NSLog(@"orders array %@", ordersArray); 
     NSLog(@"price array %@", priceArray); 
    }  
} 

50 초에 서버를 친 후 "웹 서비스 연결에 실패했습니다"라는 경고 메시지가 나타납니다. 심지어 나는 오랜 시간 동안 기다리지 않을 180 초 간격을 보내고있다. 이 문제를 어떻게 해결할 수 있습니까? 응답이 올 때까지 기다리고 싶습니다. 여기서 NSOperationQueue를 사용할 수 있습니까? 미리 감사드립니다.

+0

제품을 표시하는 데 1 분이 필요합니까? – ffarquet

+0

하지만 저장소가 기본적으로 느립니다. 아무 것도 할 수 없습니다. – vishnu

+0

50 초 내에 응답을 렌더링 할 수없는 경우 요청을 종료하는 서버가 될 수 있습니다. 그러나 나는 허풍에 동의한다. 그것은 오랜 시간을 기다리는 지옥이다. – user623396

답변

0

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error이 아닌 -(void)connectionDidFinishLoading:(NSURLConnection *)connection이 호출되자 마자 서버 측의 시간 초과로 인해 서버가 연결을 종료합니다.

잘못된 HTTP 상태 코드가 표시됩니다. 그것을 표시하려고합니다. 그러나 더 긴 시간 초과로 시스템을 작동시키는 대신 서비스 성능을 향상시켜야합니다.

+0

나는 어떤 오류도 내지 않았다. 서비스는 시간 초과 요청을 받아야합니다. 웹 응답 데이터는 null이어야합니다. – vishnu