1

我们在网上搜索并找到了 100 篇关于同一件事的帖子,但到目前为止我们还没有找到任何解决此问题的帖子。

因此,请原谅我再次问这个问题,但我们真的需要帮助来了解这里发生了什么。

我们有从 HTML 页面从 IE7 启动的 flex 应用程序。启动 SWF 应用程序后,它会多次调用后端 Java 服务(在 Weblogic 10 上运行)以检索信息。这很好用。

现在的问题是当我在同一个客户端上打开几个这样的实例时……例如通过打开多个选项卡或多个 IE7 窗口。然后我们得到#2032 流错误。

[FaultEvent fault=[RPC Fault faultString="HTTP request error" 
faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" 
bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. 
URL: http://ServerName:Port/Myservice"]. URL: http:// ServerName:Port/Myservice"]     
messageId="CA4B34AD-7A46-461E-7C6F-4D618ED0A112" type="fault" bubbles=false 
cancelable=true eventPhase=2] 

现在,如果我输入 http://ServerName : Port / Myservice [忽略空格]

在 IE7 中,它可以毫无问题地进入服务。所以网址是正确的。

如果我通过 SOAP UI 调用相同的服务,它会一次又一次地给我一个响应时间。

我能找到的最接近的解决方案是在网站上

http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/

它表明我们应该更改启动屏幕的 HTML 标头中的缓存策略。

因此,我们在所有 HTML 页面中添加了 META 标签

<head>
<META Http-Equiv="Cache-Control" Content="no-store">

但是使用wireshark,我仍然可以在返回的响应中看到缓存控制设置为无缓存(在代码片段的末尾),而不是HTML中指定的无存储。

POST /MyService/MyService HTTP/1.1 Accept: */* Accept-Language: en-US x-flash-
version:     
10,3,183,20 Content-Type: text/xml; charset=utf-8 SOAPAction: "" Content-Length: 528 
Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows 
NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 
3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E) Host: dhtqawl01:8081 
Connection: Keep-Alive Cache-Control: no-cache

你知道这是否会解决我们的问题或我们可能做错了什么吗?

--一些关于使用和浏览器使用的额外响应

这仅使用 IE7 和 Firefox 进行了测试(不记得版本)。我们公司支持 IE,不支持 Firefox。因此我们不能迁移到 Firefox。然而,我们也在 Firefox 上进行了尝试。它不会经常发生。在 IE 上 2 出 4 失败。在 Firefox 上,我们将其提高到每 12 次失败中的 2 次。

这仅使用 IE7 和 Firefox 进行了测试(不记得版本)。我们公司支持 IE,不支持 Firefox。因此我们不能迁移到 Firefox。然而,我们也在 Firefox 上进行了尝试。它不会经常发生。在 IE 上 2 出 4 失败。在 Firefox 上,我们将其提高到每 12 次失败中的 2 次。我在网上读到的(而且我不是这方面的专家)。每次调用服务器时,浏览器都可以选择缓存该响应。现在,如果我打开多个浏览器屏幕打开相同的进程 - 例如,每个 IE 窗口都会进行相同的调用......不知何故,这些响应会混淆。现在这个人在提供的 URL 中提出了什么建议。是我们在header中设置了cache选项不被缓存。这样,响应只会在需要时出现,因此不会混淆。

我们的用户不会以这种方式使用系统。但有时他们确实会收到完全相同的错误消息。他们声明他们不会打开多个会话。但这是迄今为止我们可以重新创建它的唯一方法。

至于防火墙......不确定这是否是问题,因为它至少在 IE 和 Firefox 和 SoapUI 中工作一次。

4

1 回答 1

0

在 IE 上(有几个版本我们找不到问题)。

但我们确实找到了解决方法。

我们最终使用了一个带有队列的 HttpManager。我们添加到队列中的所有请求。然后 HttpManager 将执行前 4 个请求,当它收到响应时,它会查看响应,如果发生 2032 错误,则重试 3 次,然后最终停止并显示错误并继续队列中的下一个请求。

通过限制同时请求的最大数量,我们几乎不需要重试,但在一些极端的测试用例中,我们只需要重试两次。所以3次绰绰有余。

我们还调整了模拟请求的数量,最终将其保持在 4。增加它会增加进行所有调用的总时间。

于 2015-04-29T20:41:04.333 回答