2016-08-22 25 views
6

Pracuję nad projektem Swift, który wymaga dużego zużycia interfejsów API. Wszystko działa dobrze, ale czasami (1 na 20), otrzymuję błąd Code=-1001 "The request timed out." podczas wywoływania interfejsu API.Code = -1001 "Przekroczono limit czasu żądania."

Używam Alamofire. Załączam kod do wywołania API.

let request = NSMutableURLRequest(URL: url) 
request.HTTPMethod = "POST"  
request.HTTPBody = myUrlContents.dataUsingEncoding(NSUTF8StringEncoding) 

request.timeoutInterval = 15 

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
request.setValue("application/json", forHTTPHeaderField: "Accept") 
request.setValue("\(myUrlContents.dataUsingEncoding(NSUTF8StringEncoding)!.length)", forHTTPHeaderField: "Content-Length") 
request.setValue("en-US", forHTTPHeaderField: "Content-Language") 

Alamofire.request(request) 
     .validate() 
     .responseJSON { [weak self] response in 

     if response.result.isSuccess { 
      if let result = response.result.value { 
        print("Result: \(result)") 

        completion(result: result as! NSDictionary) 
      } 
     } 
     else { 
      print(response.debugDescription) 
     } 
} 

i dziennik jest

[Request]: <NSMutableURLRequest: 0x18855620> { URL: http://....... (url)} 
[Response]: nil 
[Data]: 0 bytes 
[Result]: FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://.....(url) NSErrorFailingURLKey=http://.....(url), NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x18a08900 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102}}} 
[Timeline]: Timeline: { "Request Start Time": 493582123.103, "Initial Response Time": 493582138.254, "Request Completed Time": 493582138.254, "Serialization Completed Time": 493582138.256, "Latency": 15.151 secs, "Request Duration": 15.151 secs, "Serialization Duration": 0.002 secs, "Total Duration": 15.153 secs } 

wiem, że mogę zwiększyć limit czasu, aby uniknąć błędu. Ale chcę znać faktyczny powód, dla którego wyrzuca błąd. Żadne z moich API nie potrzebuje więcej niż 2 sekund na zwrócenie danych. To dlaczego pokazuje opóźnienie 15.151 sekund.

Używam stosu LAMP na zapleczu. Każda pomoc będzie doceniona.

+0

Czy widzisz żądanie przekroczenia limitu czasu na serwerze? Ile czasu zajmuje serwer, aby go przetworzyć? –

+0

Czy trafiasz dokładnie tym samym adresem URL za każdym razem? Wydaje mi się mało prawdopodobne, że jest to problem z Twoją aplikacją. Najprawdopodobniej masz scenariusz, w którym interfejs API działa wolno. –

+0

Czy próbowałeś wysłać tę prośbę do klienta REST? Czy to jest limit czasu? – quant24

Odpowiedz

3

Wystąpił błąd z kodem = -1001 "Przekroczono limit czasu żądania.". Próbowałem kilku rzeczy. Nic nie działało. W końcu dowiedziałem się, że problem tkwi w moich parametrach, że wysyłam treść żądania do serwera, który miał niewłaściwy format (wartość była w porządku, ale typ był nieprawidłowy). To dlatego żądanie było limit czasu, ponieważ serwer nie był w stanie go przetworzyć. Możesz to sprawdzić, jeśli nic innego nie działa dla ciebie.

+1

dzięki! Właśnie spędziłem kilka godzin próbując dowiedzieć się, co jest nie tak z prostą prośbą używając 'Moya' +' Alamofire'. Problemem był słownik pustych parametrów '[:]' zamiast 'nil' – medvedNick

Powiązane problemy