连接到我的WebService(Lotus Notes数据库)的代码由Flash Builder通过“Data / Connect with WebService ...”创建。一切正常,但我有一个问题是增加请求超时。 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
知道为什么会这样吗?
答案 0 :(得分:2)
我遇到了同样的问题,requestTimeout无效。
如果有人在寻找答案,这个配置对我来说很好:
import flash.net.URLRequestDefaults;
URLRequestDefaults.idleTimeout = 120000; //note this value represents milliseconds (120 secs)
请点击此处了解更多详情:Flex HTTPService times out anyway
答案 1 :(得分:0)
虽然似乎假设requestTimeout不起作用。它确实......第一次。
在第一个请求之后,requestTimeout在
中设置HTTPService.channelSet.currentChannel.requestTimeout
如果你必须改变超时,你会想要在那里做。
要查看具体的违规代码,请参阅AbstractOperation.getDirectChannelSet()。即使对于HTTPService的不同实例,它也来自:
private static var _directChannelSet:ChannelSet;
_directChannelSet仅实例化一次,其上的requestTimeout仅在创建时设置,因此即使您在HTTPService上更改requestTimeout,它也不会反映在请求中。