2012-06-12 34 views
7

Tôi đang gọi một dịch vụ web từ ứng dụng iOS của mình có thể mất đến bốn phút để trả lại. Tôi đang sử dụng RestKit cho cuộc gọi và tải các đối tượng. Điều tôi đang tìm kiếm là khi yêu cầu mất nhiều thời gian, tôi sẽ gặp lỗi Timeout sau ~ 60 giây. Tôi đã thử đặt timeoutInterval thành số tiền vô lý nhưng nó vẫn hết sau ~ 60.RestKit Timeout Bị bỏ qua

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME]; 

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

//timeout 
objectManager.client.timeoutInterval = 1000; 

Đây là cuộc gọi đến dịch vụ:

- (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]; 

}

tôi đang làm các cuộc gọi đến webservice trong một thread nền - là có một cái gì đó trong thiết kế mà đó có thể là gây ra vấn đề? Tôi không thể tưởng tượng được điều gì, như iOS không cho phép các chủ đề nền chạy lâu hơn 60 giây? Tôi không thể tìm ra vấn đề là gì.

Có phải là thời gian chờ để nhận phản hồi từ máy chủ hoặc để nhận phản hồi WHOLE từ máy chủ không? Tôi đang trả về một phản ứng json tiềm năng rất lớn - tôi có cần trả lại toàn bộ điều trong giới hạn thời gian chờ hay không, hay tôi chỉ cần nhận được phản hồi từ máy chủ trong giới hạn?

+0

Cho chúng tôi biết cách bạn gửi yêu cầu của mình. Thời gian chờ là thời gian mà ứng dụng của bạn đợi cho đến khi ứng dụng nhận được bất kỳ phản hồi nào, bạn không cần trả lại toàn bộ nội dung trong thời gian này. – lawicko

+0

Cảm ơn - Tôi đã thêm một chút, đó là ý của bạn? Tôi đã kiểm tra gấp đôi và không có vấn đề gì khoảng thời gian chờ của tôi là, nó chết sau 60 giây. – Michaela

+1

Vâng, đây là ý tôi. Tôi không thấy bất cứ điều gì sai trái với mã của bạn, làm thế nào để bạn nắm bắt được thời gian chờ? Các tài liệu RestKit nói rằng thời gian chờ mặc định được đặt là 120 giây và hàm timeout đó sẽ trả về một RKRequestConnectionTimeoutError thông qua didFailLoadWithError: ', vì vậy nếu bạn nắm bắt nó trong' requestDidTimeout: 'thì có khả năng một số cơ chế khác sẽ gọi nó. Bạn có thể muốn đặt một trình gỡ lỗi trong một phương thức để nắm bắt thời gian chờ và kiểm tra ngăn xếp cuộc gọi để tìm chính xác nguyên nhân gây ra thời gian chờ, có lẽ điều này sẽ giúp bạn xác định vị trí của giá trị 60s. – lawicko

Trả lời

0

Tôi gặp vấn đề tương tự, phương thức ủy nhiệm requestDidTimeout:(RKRequest*)request không bao giờ được gọi. Không có vấn đề nếu tôi đặt thời gian chờ trên RKRequest hoặc RKClient.

Nhớ lại: Khi đặt thời gian chờ theo yêu cầu, tôi thấy yêu cầu KHÔNG tôn trọng thời gian chờ đã đặt KHÔNG ĐỪNG Tôi cũng gọi [requestObject createTimeOutTimer].

Tuy nhiên, những gì tôi nhận thấy trong triển khai của bạn là bạn sử dụng 1000 cho một NSTimeInterval: Bạn có nghĩa là 1000 giây cho thời gian chờ không? Thay đổi thành 1 nếu bạn có nghĩa là một giây = 1000 msecs.

Thời gian chờ mặc định trên RestKit là 120 giây, vì vậy rất có thể đây là thời gian chờ của NSURLConnection.

2

Nếu tôi hiểu vấn đề của bạn, giải pháp sẽ là:

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

Vì vậy, khi bạn có vấn đề với khoảng thời gian chờ, nó sẽ bị bắt tại phương pháp này.

Các vấn đề liên quan