iOS アプリから Web サービスを呼び出していますが、返されるまでに最大 4 分かかる場合があります。オブジェクトの呼び出しと読み込みに 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 応答を返す可能性があります。タイムアウト制限内にすべてを返す必要がありますか?それとも、制限内でサーバーから応答を取得する必要があるだけですか?