2

我最近升级WSO2 ESB到了 4.7 版,Windows Server 2008 R2并且在简单地将 SOAP 请求代理到端点时遇到了下一个错误:

在处理程序处于不一致状态时接收响应REQUEST_HEAD

ERROR_CODE : 102511  
ERROR_MESSAGE : Error in Sender  
ERROR_DETAIL : Error in Sender  
ERROR_EXCEPTION : null 

问题是,文档中没有描述这个错误代码,而且毫无例外地,它是由什么构成的并不明显。我能找到的最接近的代码是 SND_INVALID_STATE = 102510 并且从源代码来看,该请求似乎带有无效的标头。但并非所有请求都失败了。同一个请求可以随机通过或失败。我已经用 fiddler 记录了所有请求并重播了它们。失败的最终可以通过,反之亦然。在此之前,我已经在本地机器(Windows 7)上部署并测试了新版本的 ESB,并且仅在冷启动时遇到了此类错误。

重现它的最简单配置包括 Path Through Proxy 服务和地址端点。

代理服务配置:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestEP" transports="http" statistics="disable" trace="enable" startOnLoad="true">
   <target endpoint="TestEP">
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <description/>
</proxy>

地址端点描述

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="TestEP">
   <address uri="http://mydomain.test/SystemServices.asmx">
     <syn:suspendOnFailure>
       <syn:initialDuration>0</syn:initialDuration>
       <syn:progressionFactor>1.0</syn:progressionFactor>
       <syn:maximumDuration>0</syn:maximumDuration>
     </syn:suspendOnFailure>
   </address>
</endpoint>

有没有其他人遇到过这个错误或知道如何处理它?我将不胜感激任何有关情况的见解。

更新:
请求失败的原因似乎是

Expect: 100-continue

请求 HTTP 标头中的选项。当我在提琴手中创建一个规则来删除它时,所有的查询都成功了。目前尚不清楚是否有办法处理这种行为,WSO2 ESB或者是否应该删除标题的这一部分。

4

2 回答 2

2

我今天从 WSO2 ESB 4.5.1 升级到 4.7.0 时遇到了这个问题。我在 4.5.1 中遇到了另一个问题,因此我不得不升级,所以在遇到 4.7.0 的这个问题时,我别无选择,只能解决它。

想了想,才想起在 4.6.0 中为了提高性能,默认的传输方式是从 NHTTP 切换到 Passthrough 的。4.7.0 附带了两者的配置,但默认启用 PT。配置文件位于axis2目录中:

${carbon.home}/repository/conf/axis2/

PT 配置文件是axis2_pt.xml. NHTTP 之一是axis2_nhttp.xml. 您可以区分它们以了解发生了什么变化;幸运的是,差异很干净。

您可以通过修改主配置文件轻松地从 PT 切换到 NHTTP:

${carbon.home}/repository/conf/carbon.xml

你有<ConfigurationFile>下面的元素<Axis2Config>。默认文件axis2.xml似乎或多或少是axis2_pt.xml. 要切换到 NHTTP,只需<ConfigurationFile>${carbon.home}/repository/conf/axis2/axis2_nhttp.xml.

切换到 NHTTP 解决了我的 ESB 4.7.0 无法正确处理 100 CONTINUE 的问题。具体来说,我试图通过 ESB 使用 curl 将 PDF 上传到另一个服务。使用PT,失败;使用 NHTTP,它工作得很好。我的明显结论是,在这种情况下,PT 简直是错误的。

从我对 PT 与 NHTTP 所做的阅读来看,从一个切换到另一个的唯一“官方”副作用是 PT 在某些情况下应该更快。然而,NHTTP 已经存在了更长的时间,因此很可能仅仅因为经历了更多的错误修复轮次而变得更加稳固。我不确定这一点,因为我没有参与 WSO2 ESB 的开发,但这是一个有根据的猜测。:)

我也很想评论 Isuru Perera 的回答,但我没有必要的声誉,所以我担心我不得不把我的两分钱放在https://wso2.org/jira/browse/APIMANAGER-1007这里。这个问题似乎确实相关——尤其是根据我今天对 curl 的经验——但不幸的是,WSO2 的好心人在经过大量评论后将这个问题解决为“不是错误”,这些评论最终建议避免使用 curl,因为其他客户端“按预期工作”,从而使这是一个“卷曲问题”。恕我直言,对符合 HTTP 规范的请求的破坏行为不是客户端问题,应该解决。这有效地使 PT 传输在某些情况下无法使用 - 即客户端对于如何 POST 大型主体更加智能的情况。这真是太可惜了,因为不需要解析请求正文的场景正是 PT 传输的设计目的,它应该擅长的地方!

哦,这是我在 stackoverflow 上的第一篇文章,所以如果我违反了任何家规,我很抱歉;一段时间以来,我一直是一个被动的参与者,所以我希望我没有做错什么!

于 2013-08-22T01:30:43.553 回答
1

WSO2 API Manager 似乎也发生了类似的错误。见https://wso2.org/jira/browse/APIMANAGER-1007

ESB 在 API Manager 中运行,因此您可能会遇到JIRA 评论中提到的类似问题。

以下文档列出了大部分错误代码。

http://docs.wso2.org/wiki/display/ESB470/Error+Handling

但不幸的是,这个问题中提到的错误代码没有列出。

于 2013-08-12T17:16:08.883 回答