Flex:HTTP请求错误#2032

时间:2009-09-29 11:08:27

标签: flex actionscript-3 http comet

在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'

我认为这取决于用户的浏览器。

有什么想法吗?

7 个答案:

答案 0 :(得分:1)

此错误似乎非常通用,我建议尝试收集更多信息并分享有关此问题。

  • This post与您的情况类似。
  • This post可能会帮助您找到更多有用的调试信息。
  • 哪些客户受到影响?
  • 您可以使用Charles,Wireshark或类似功能捕获http状态代码或正在发送的流量吗?

答案 1 :(得分:1)

尝试使用flash.events.HTTPStatusEvent.HTTP_STATUS聆听请求的HTTP状态 这可能会给你一些关于出了什么问题的更多信息。

答案 2 :(得分:1)

我打算在基本相同的主题上打开另一个问题,但我认为两个未得到回答的问题比1更糟糕。

我从一些Flex应用程序的用户那里得到了类似的间歇性问题,但症状略有不同。我能提供的全部信息包括:

  1. 它也发生在短(10ms)请求上。
  2. 似乎是随机发生的。
  3. 连接通过SSL。
  4. 仅适用于IE用户,而不适用于使用FireFox的用户。
  5. 一旦发生,用户通知我他们需要关闭IE并重新启动它(有些用户说他们需要重启,但我认为这不仅仅是IE重启)。似乎需要几分钟才能重置自己。
  6. 它似乎不会影响用户的其他互联网连接 - 他们可以继续使用其他IE窗口。
  7. 一旦发生,似乎Flex应用程序的HTTPService请求都不起作用。
  8. 它(显然)只发生在一小部分用户身上。最初它 似乎是由于他们与主服务器的物理距离,但这不再是 似乎必然如此(虽然它可能是连接质量)。
  9. 我不清楚用户运行的Adobe Flash版本。 代码是使用Adobe Flex 3.4(linux)构建的
  10. 该应用程序执行各种请求,许多请求并行,但我无法重现该问题。
  11. 用户确实建议在几分钟后返回应用程序后发生此错误。
  12. 服务器日志中似乎没有相关的服务器端请求条目,表明请求永远不会到达服务器(可能永远不会离开客户端)。
  13. 服务器响应具有相关缓存标头的所有请求以转换IE缓存。
  14. 我们目前的解决方法是请求用户在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下的间歇性错误,但没有提到解决方案。如果我找到一个,我会在这里更新我的帖子。

    <强>更新

    在发生这种情况后与用户交谈后,我们发现了以下内容:

    1. 用户可以在IE中打开一个新选项卡,并加载相同的Flex应用程序 - 因此没有互联网连接问题。
    2. 用户可以在包含发生错误的灵活应用的标签中加载google.com - 因此似乎没有与该特定标签相关的连接问题。
    3. 用户可以将带有损坏的应用程序的选项卡中的地址复制到另一个选项卡中,然后加载Flex应用程序。
    4. 用户可以在Flex应用程序损坏的标签中加载google.com后,再次在flex应用程序URL中复制,并立即解决问题。
    5. 似乎在我的特定应用程序中,我的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

Firefox:http://www.speedguide.net/faq_in_q.php?qid=231

答案 6 :(得分:0)

我的Air应用程序中发生了这个确切的问题。我最终意识到我不小心将urlrequest.idleTimeout设置为10.此超时实际上是以毫秒为单位,我的网络服务器是本地的,所以如果我没有向本地服务器发送任何参数(没有获取或发布),它就可以工作。每当我发送任何参数和请求时,它当然会失败,因为我的脚本运行时间超过10毫秒并返回数据。

您可能需要注意缓慢加载脚本。您可以通过强制某些静态输出进行调试,然后停止该页面进一步执行。在我的php页面中,我把:

<?php
echo "hello=hi";
die();
?>

此外,请确保在沙箱限制内对其进行调试。我正在使用自签名的ssl证书,并且在尝试连接到我的本地测试网络服务器时会有很多警告。

希望有所帮助!