Тайм-аут запроса Adobe Flex 4.6 WebService

Код для подключения к моему веб-сервису (база данных Lotus Notes) создается Flash Builder через «Данные/Подключение к веб-сервису…». Все работает нормально, но у меня проблема с увеличением времени ожидания запроса. API говорит, что вы можете установить время ожидания запроса следующим образом:

_serviceControl.requestTimeout = 300;

На iOS (iPad) все работает нормально. Но если я запускаю свое приложение на рабочем столе или на смартфоне Android, это работает, только если я устанавливаю время ожидания запроса менее ~ 30 секунд. Если я не устанавливаю время ожидания запроса или больше 30, а моему приложению требуется больше 30 секунд для ожидания ответа/результата, «_serviceControl» запускает FaultEvent с сообщением:

body = ""  
clientId = "DirectHTTPChannel0"  
correlationId = "CDED773E-34E5-56F8-D521-4FFC393D7565"  
destination = ""  
extendedData = (null)  
faultCode = "Server.Error.Request"  
faultDetail = "Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: "http://...?OpenWebService" errorID=2032]. URL: "http://...?OpenWebService"  
faultString = "HTTP request error"  
headers = (Object)#1  
DSStatusCode = 0  
messageId = "91D11378-49D4-EDF7-CE7A-4FFCB09EBC47"  
rootCause = (flash.events::IOErrorEvent)#2  
bubbles = false  
cancelable = false  
currentTarget = (flash.net::URLLoader)#3  
bytesLoaded = 0  
bytesTotal = 0  
data = ""  
dataFormat = "text"  
errorID = 2032  
eventPhase = 2  
target = (flash.net::URLLoader)#3  
text = "Error #2032: Stream Error. URL: "http://...?OpenWebService"  
type = "ioError"  
timestamp = 0  
timeToLive = 0

Любая идея, почему это происходит?


person revle87    schedule 15.05.2012    source источник
comment
Я не мог воспроизвести эту проблему в производственной системе. Поэтому я думаю, что причина в моей среде разработки.   -  person revle87    schedule 18.05.2012


Ответы (2)


У меня была такая же проблема, requestTimeout не работал.

Если кто-то ищет ответ, эта конфигурация отлично работает для меня:

import flash.net.URLRequestDefaults;

URLRequestDefaults.idleTimeout = 120000; //note this value represents milliseconds (120 secs)

Подробнее см. здесь: в любом случае тайм-аут Flex HTTPService истекает

person klev    schedule 14.03.2013
comment
Добро пожаловать в Stack Overflow! Не могли бы вы кратко описать фактический ответ в дополнение к ссылке на другой вопрос о переполнении стека? - person Don Cruickshank; 14.03.2013

Хотя предполагается, что requestTimeout не работает. Это действительно так... в первый раз.

После 1-го запроса requestTimeout устанавливается в

HTTPService.channelSet.currentChannel.requestTimeout

Если вам нужно изменить тайм-аут, вы захотите сделать это там.

Чтобы увидеть конкретный код нарушения, см. AbstractOperation.getDirectChannelSet(). Даже для разных экземпляров HTTPService он извлекается из:

private static var _directChannelSet:ChannelSet;

_directChannelSet создается только один раз, а requestTimeout для него устанавливается только при создании, поэтому даже если вы измените requestTimeout в HTTPService, это не отразится в запросе.

person David Smith    schedule 22.05.2014