3

在 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);

该应用程序具有彗星架构。所以它会发出长时间运行的请求。在等待对该请求的响应时,可以同时进行其他请求。

该应用程序在大多数情况下都有效。但有时某些客户端在执行长时间运行的请求时会收到 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'

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

有任何想法吗?

4

7 回答 7

1

这个错误看起来很笼统,我建议尝试收集更多信息并分享有关该问题的信息。

  • 这篇文章看起来与你的情况相似。
  • 这篇文章可能会帮助您找到更多有用的调试信息。
  • 哪些客户受到影响?
  • 您能否捕获 http 状态代码或使用Charles、Wireshark 或类似工具发送的流量?
于 2009-09-29T14:41:05.033 回答
1

尝试侦听请求的 HTTP 状态,使用flash.events.HTTPStatusEvent.HTTP_STATUS
That 可能会为您提供有关问题所在的更多信息。

于 2009-11-24T15:33:44.597 回答
1

我打算就本质上相同的主题提出另一个问题,但我认为两个未回答的问题比 1 更糟糕。

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

  1. 它也发生在短 (10ms) 请求上。
  2. 它似乎随机发生。
  3. 连接通过 SSL。
  4. 它只发生在 IE 用户身上,不会发生在使用 FireFox 的用户身上。
  5. 一旦发生,用户会告诉我他们需要关闭 IE 并重新启动它(有些用户说他们需要重新启动,但我认为这不太可能只是 IE 重新启动)。似乎需要几分钟才能自行重置。
  6. 它似乎不会影响用户的其余 Internet 连接——他们可以继续使用其他 IE 窗口。
  7. 一旦发生,似乎来自 flex 应用程序的 HTTPService 请求将不起作用。
  8. 它(显然)只发生在一小部分用户身上。最初这似乎是由于它们与主服务器的物理距离,但这似乎不再是必然的情况(尽管它可能是连接质量)。
  9. 我不清楚用户正在运行什么版本的 Adob​​e Flash。代码是用 Adob​​e Flex 3.4 (linux) 构建的
  10. 该应用程序执行了广泛的请求,尽管我无法重现该问题,但许多请求是并行的。
  11. 用户确实建议在几分钟后返回应用程序后发生此错误。
  12. 服务器日志中似乎没有相关的服务器端请求条目,表明请求永远不会到达服务器(可能永远不会离开客户端)。
  13. 服务器使用相关的缓存标头响应所有请求以关闭 IE 缓存。

我们目前的解决方法是要求用户在 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 应用程序 - 因此不会出现 Internet 连接问题。
  2. 用户可以在出现错误的 flex 应用程序的选项卡中加载 google.com - 因此似乎没有与该特定选项卡相关的连接问题。
  3. 用户可以将带有损坏应用程序的选项卡中的地址复制到另一个选项卡中,然后将加载 flex 应用程序。
  4. 用户可以在 flex 应用程序中断的选项卡中加载 google.com 后,再次复制 flex 应用程序 URL,然后立即解决问题。

看来,在我的特定应用程序中,我的 flex 应用程序设法破坏了 flash 插件/VM,以至于在破坏后,不允许对 URL 进行进一步的请求。

我对此感到非常困惑,我建议用户使用 FireFox,或者将应用程序包装在 Air 包中。

于 2010-05-14T02:35:39.303 回答
1

当我在 HttpRequest 中发送更长的(3-4K!)参数时,我遇到了同样的问题。一旦我发送了较小的,它就起作用了(没有刷新,重新加载或任何东西)。我不知道您可以发送的参数长度是否在客户端或 Web 服务器端有限制,但这肯定会导致问题。
网址限制可能会导致它

于 2011-03-26T16:13:41.873 回答
1

我在这里遇到了同样的问题,但使用的是 Flash (Web - Flex 4.1 SDK) 应用程序。在尝试了各种各样的解决方案后,我们缩小了范围,最终找到了一个对所有系统都非常可靠的解决方案,包括新安装的机器。

一个。在 flex 预初始化阶段,在应用程序的根(或阶段)添加全局事件侦听器。

IOErrorEvent.IO_ERROR
IOErrorEvent.NETWORK_ERROR
HTTPStatusEvent.HTTP_STATUS
ErrorEvent.ERROR
SecurityErrorEvent.SECURITY_ERROR

如果出现错误 -event.preventDefault();

。在应用程序中使用的每个加载器上添加事件侦听器,以解决以下错误:

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 策略文件,其中包含允许 http 请求 xml 标记。

<allow-http-request-headers-from domain="*" headers="*"/>

在您的特定情况下根据需要替换 * 。

干杯

于 2012-02-06T10:44:37.727 回答
0

听起来你可能有更多的连接出去,然后浏览器支持。您是否确切知道错误发生时存在多少个打开的连接?

不同的浏览器允许同时打开的连接数不同。IE 6,7,8 都允许不同的数量:http: //support.microsoft.com/kb/282402

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

于 2009-09-29T14:25:56.360 回答
0

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

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

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

此外,请确保在沙盒限制范围内对其进行调试。我使用的是自签名 ssl 证书,尝试连接到本地测试网络服务器时出现很多警告。

希望有帮助!

于 2011-11-28T19:34:37.740 回答