1

使用 WSO2 API 管理器 1.3.1。尝试使用 API Manager 代理到 REST 服务。我已经在 API Mgr 中设置了服务,并且可以成功发布和获取响应,通常是 json,尽管有些是文本。

但是,当我尝试获取返回二进制内容的资源(zip“文件”,内容类型:应用程序/八位字节流)时,API 管理器似乎没有响应,并且我可以在控制台窗口中看到错误(我在控制台中运行 wso2server.bat):

[2013-07-03 11:52:05,048] 警告 - 写入响应时 SourceHandler 连接超时:173.21.1.22:1268->173.21.1.22:8280

我的内部服务上有一个 HTTPModule,它似乎正在响应适当的内容(我可以看到记录的 GET 和响应数据)。我也可以直接调用内部服务并得到响应,这样事情就结束了。但是通过 API Manager 似乎失败了。

我找到了有关启用其他内容类型的信息:

WSO2 API Manager - 使用非 XML 响应发布 API

http://wso2.com/library/articles/binary-relay-efficient-way-pass-both-xml-non-xml-content-through-apache-synapse

使用该信息,我尝试使用二进制中继启用 messageFormatter 和 messageBuilder 的应用程序/八位字节流,但它没有帮助(或似乎有所作为)。我什至禁用了所有其他内容类型并将二进制中继用于所有内容类型,但它没有帮助。

目前,我在axis2.xml和axis2_client.xml(在它们的相应部分)中只运行以下内容:

<messageBuilder contentType=".*" class="org.wso2.carbon.relay.BinaryRelayBuilder"/
<messageFormatter contentType=".*" class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>

我仍然收到我的 json 和文本响应,但 WSO2 超时获取 zip 内容。我在axis2.xml中看到了关于启用“。*”中继的JIRA,但由于其他请求似乎有效,我不确定这对我来说是个问题。我确实尝试将 'format="rest"' 添加到 API 定义中,但它似乎破坏了所有操作,即使是之前有效的操作,所以我将其拉回。

任何关于正在发生的事情或如何挖掘和调试的想法都会有所帮助。谢谢!

4

1 回答 1

0

在处理了太久之后,事实证明我的 WSO2 配置是正确的,使用 Message Relay 和 BinaryRelayBuilder 等。虽然我的 REST 服务可以立即回复,但我设置了一个我认为 WSO2 不喜欢的 HTTP 标头,因为当我删除它时,WSO2 会以预期的速度(立即)回复。我正在设置标题:

传输编码:二进制

当我从我的服务回复中删除该标题时,WSO2 按预期运行。我不知道这是否是 WSO2 中的“错误”,或者我是否实施不正确,但我确实通过从我的服务响应中省略该标头来获得看起来像“解决方法”的东西。

于 2013-07-23T15:37:45.710 回答