在Flex 3应用程序中,我使用 HTTPService 类向服务器发出请求:
var http:HTTPService = new HTTPService();
http.method = 'POST';
http.url = hostUrl;
http.resultFormat = 'e4x';
http.addEventListener(ResultEvent.RESULT, ...);
http.addEventListener(FaultEvent.FAULT, ...);
http.send(params);
该应用程序具有Comet架构。所以它会使长时间运行请求。在等待对此请求的响应时,可以同时进行其他请求。
该应用程序适用于大多数情况。但有时一些客户端会在执行长时间运行请求时遇到HTTP请求错误:
faultCode:Server.Error.Request
faultString:'HTTP request error'
faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: http://example.com/ws'
我认为这取决于用户的浏览器。
有什么想法吗?
答案 0 :(得分:1)
此错误似乎非常通用,我建议尝试收集更多信息并分享有关此问题。
答案 1 :(得分:1)
尝试使用flash.events.HTTPStatusEvent.HTTP_STATUS
聆听请求的HTTP状态
这可能会给你一些关于出了什么问题的更多信息。
答案 2 :(得分:1)
我打算在基本相同的主题上打开另一个问题,但我认为两个未得到回答的问题比1更糟糕。
我从一些Flex应用程序的用户那里得到了类似的间歇性问题,但症状略有不同。我能提供的全部信息包括:
我们目前的解决方法是请求用户在FireFox中运行该应用程序。
错误的完全转储是:
HTTP Status Code: null
Fault Code: Server.Error.Request
Fault Error ID: null
Fault Detail: Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url
Fault String: HTTP request error
Fault Name: Error
Fault Message: faultCode:Server.Error.Request faultString:'HTTP request error' faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url'
Root Cause: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]
很多人都提到错误2032,有些甚至只提到IE下的间歇性错误,但没有提到解决方案。如果我找到一个,我会在这里更新我的帖子。
<强>更新强>
在发生这种情况后与用户交谈后,我们发现了以下内容:
似乎在我的特定应用程序中,我的flex应用程序设法将Flash插件/ VM分解到这样的程度,即在中断之后,不允许进一步请求URL。
我对此感到非常难过,我建议用户使用FireFox,或将应用程序包装在Air包中。
答案 3 :(得分:1)
当我在HttpRequest中发送更长的(3-4K!)参数时,我遇到了同样的问题。一旦我发送较小的一个它工作(没有刷新,重新加载或任何东西)。我不知道客户端或Web服务器端是否存在您可以发送的参数长度的限制,但这肯定会导致问题。
url limitations may cause it
答案 4 :(得分:1)
我在这里有一些相同的问题,但有一个Flash(Web - Flex 4.1 SDK)应用程序。 在尝试了各种各样的解决方案后,我们终于找到了一个可靠的系统,包括新安装的机器。
<强> A 即可。在flex preinitialize阶段,在应用程序的根(或阶段)添加全局事件侦听器。
IOErrorEvent.IO_ERROR
IOErrorEvent.NETWORK_ERROR
HTTPStatusEvent.HTTP_STATUS
ErrorEvent.ERROR
SecurityErrorEvent.SECURITY_ERROR
如果错误是正确的 - event.preventDefault();
<强>乙即可。在App中使用的每个加载器上添加事件侦听器,以获取以下错误:
IOErrorEvent.IO_ERROR
SecurityErrorEvent.SECURITY_ERROR
HTTPStatusEvent.HTTP_STATUS
*尝试恢复,就像回到外部接口调用...
<强> C 即可。将bin-release文件夹中的所有SWZ文件与SWF文件一起放在用于交付应用程序的服务器上的相同路径中。 在我的情况下,这些是所需的文件:
sparkskins_4.5.1.21328.swz
spark_4.5.1.21328.swz
textLayout_2.0.0.232.swz
rpc_4.5.1.21328.swz
osmf_1.0.0.16316.swz
framework_4.5.1.21328.swz
*发现这一点,我使用Chrome开发者控制台查看页面上发生的错误,并在应用尝试下载这些文件时发现了404链。
<强> d 即可。有一个正确配置的crossdomain.xml策略文件,其中包含allow http request xml标记。
<allow-http-request-headers-from domain="*" headers="*"/>
在您的特定情况下根据需要更换*。
干杯
答案 5 :(得分:0)
听起来你可能有更多的联系,然后浏览器支持。您是否确切知道错误时存在多少个打开的连接?
不同的浏览器允许不同数量的同时打开连接。 IE 6,7,8都允许不同的金额:http://support.microsoft.com/kb/282402
答案 6 :(得分:0)
我的Air应用程序中发生了这个确切的问题。我最终意识到我不小心将urlrequest.idleTimeout
设置为10.此超时实际上是以毫秒为单位,我的网络服务器是本地的,所以如果我没有向本地服务器发送任何参数(没有获取或发布),它就可以工作。每当我发送任何参数和请求时,它当然会失败,因为我的脚本运行时间超过10毫秒并返回数据。
您可能需要注意缓慢加载脚本。您可以通过强制某些静态输出进行调试,然后停止该页面进一步执行。在我的php页面中,我把:
<?php
echo "hello=hi";
die();
?>
此外,请确保在沙箱限制内对其进行调试。我正在使用自签名的ssl证书,并且在尝试连接到我的本地测试网络服务器时会有很多警告。
希望有所帮助!