2012-06-12 18 views
7

Llamo a un servicio web desde mi aplicación iOS que puede demorar hasta cuatro minutos en regresar. Estoy usando RestKit para la llamada y la carga de los objetos. Lo que estoy descubriendo es que cuando las solicitudes tardan mucho, recibo un error de Tiempo de espera después de ~ 60 segundos. He intentado configurar el timeoutInterval en montos absurdos, pero todavía expira después de ~ 60.Tiempo de espera de RestKit Ser ignorado

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME]; 

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 
objectManager.client.disableCertificateValidation = YES; 

//timeout 
objectManager.client.timeoutInterval = 1000; 

Aquí está la llamada al servicio:

- (void)loadData 
{ 

NSString *uid = [self retrieveFromUserDefaults:@"login_preference"]; 
NSString *pwd = [self retrieveFromUserDefaults:@"password_preference"]; 

if([uid isEqualToString:@""] || [pwd isEqualToString:@""]){ 
    [self stopSpinner]; 
    [self enableUserInterface:YES]; 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Missing Settings" 
                message:@"Please enter your login information in the settings." 
                delegate:nil 
              cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    return; 

} 


RKObjectManager* objectManager = [RKObjectManager sharedManager]; 
NSDictionary *params = [NSDictionary dictionaryWithObjects: 
         [NSArray arrayWithObjects:uid, pwd, nil] 
                forKeys:[NSArray arrayWithObjects:@"uid", @"pwd", nil]]; 

// Load the object model via RestKit  
[objectManager loadObjectsAtResourcePath:[@"/synchData" appendQueryParams:params] delegate:self]; 

}

que estoy haciendo la llamada al servicio web en un subproceso en segundo plano - ¿Hay algo en que el diseño que podría ser causando el problema? No me puedo imaginar qué, como iOS, que no permite que los hilos de fondo funcionen durante más de 60 segundos. Simplemente no puedo entender cuál es el problema.

¿El tiempo de espera es el tiempo que lleva obtener una respuesta del servidor, o para obtener la respuesta ENTERA del servidor? Estoy devolviendo una respuesta JSON potencialmente muy grande. ¿Debo devolver todo dentro del límite de tiempo de espera o solo necesito obtener una respuesta del servidor dentro del límite?

+0

Muéstranos cómo envía sus solicitudes. El tiempo de espera es el tiempo que su aplicación espera hasta que recibe alguna respuesta, no necesita devolver todo dentro de este tiempo. – lawicko

+0

Gracias - He añadido un poco, ¿es eso lo que quieres decir? Lo comprobé dos veces y no importa cuál sea mi intervalo de tiempo de espera, está muriendo después de 60 segundos. – Michaela

+1

Sí, esto es lo que quise decir. No veo nada mal con tu código, ¿cómo atrapas el tiempo de espera? Los documentos de RestKit dicen que el tiempo de espera predeterminado está establecido en 120 segundos y que la función de tiempo de espera 'devolverá un RKRequestConnectionTimeoutError a través de didFailLoadWithError:', por lo que si lo detecta en 'requestDidTimeout:' existe la posibilidad de que otro mecanismo lo invoque. Es posible que desee colocar un depurador en un método que atrape el tiempo de espera y examinar la pila de llamadas para encontrar exactamente qué causa el tiempo de espera, quizás esto le ayude a identificar de dónde proviene el valor de los 60. – lawicko

Respuesta

0

Tengo un problema similar, nunca se ha llamado al método delegado requestDidTimeout:(RKRequest*)request. No importa si configuro el tiempo de espera en RKRequest o RKClient.

Advertencia: Al ajustar el tiempo de espera en la solicitud, veo la solicitud de no respetar el conjunto de tiempo de espera MENOS También llamo [requestObject createTimeOutTimer].

Sin embargo, lo que noté en su implementación es que usa 1000 para un NSTimeInterval: ¿Quiere decir 1000 segundos para el tiempo de espera? Cambia a 1 si te refieres a un segundo = 1000 msecs.

El tiempo de espera predeterminado en RestKit es de 120 segundos, por lo que es muy probable que se trate de un tiempo de espera de NSURLConnection.

2

Si entiendo su problema, la solución sería:

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error 

Así que cuando usted tiene un problema con un intervalo de tiempo de espera, será atrapado en este método.

Cuestiones relacionadas