我正在从我的 iOS 应用程序调用 Web 服务,最多可能需要四分钟才能返回。我正在使用 RestKit 来调用和加载对象。我发现当请求需要很长时间时,我会在大约 60 秒后收到超时错误。我尝试将 timeoutInterval 设置为荒谬的数量,但它仍然在 ~60 之后超时。
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME];
objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
objectManager.client.disableCertificateValidation = YES;
//timeout
objectManager.client.timeoutInterval = 1000;
这是对服务的调用:
- (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];
}
我正在后台线程中调用 Web 服务 - 该设计中是否存在可能导致问题的东西?我无法想象什么,比如 iOS 不允许后台线程运行超过 60 秒?我只是不知道是什么问题。
超时是从服务器获得响应所需的时间,还是从服务器获得整个响应所需的时间?我正在返回一个可能非常大的 json 响应 - 我需要在超时限制内返回整个内容,还是只需要在限制内从服务器获取任何响应?