【问题标题】:For Flex remote object calls (BlazeDS), is there a size limitation on objects returned?对于 Flex 远程对象调用 (BlazeDS),返回的对象是否有大小限制?
【发布时间】:2014-09-24 14:07:07
【问题描述】:

我有一个生产移动 Flex 应用程序,它使用 RemoteObject 调用进行所有数据访问,它运行良好,除了我刚刚添加的一个新远程调用,它仅在使用发布版本运行时失败。在使用调试构建的设备 (iPhone) 上运行时,相同的调用工作正常。当使用发布版本运行时,从不调用结果处理程序(也不会调用故障处理程序)。在调试模式下查看 BlazeDS 日志,接收到调用并发送回数据。我已将其范围缩小到似乎是数据大小问题。

我的目标是一个特定的数据调用,它在字符串值中返回一个 44kb 的字符串长度,该调用失败(发布构建)。当我没有在对象上填充字符串值(在服务器端 Java 代码中)时(只需将其设置为空字符串),就会调用结果处理程序,并再次使用发布版本返回对象。这适用于调试版本。

调用中返回的自定义对象是一个非常简单的对象,具有简单类型 boolean、int、String 和一个 org.23c.dom.Document 类型的 getter/setter。这种相同的对象类型用于其他其他 RemoteObject 调用(不同的数据)并且工作正常(发布和调试构建)。我最初是作为文档返回的,但是为了确保这不是问题,将要返回的值更改为字符串,以排除序列化中的 XML/Dom 问题。

我不明白 1) 为什么 RemoteObject 调用的发布构建与调试构建行为不同,2) 为什么在发送大量(但并非不合理)数据量时调用在调试构建中起作用在 String 对象中,但不在发布版本中。

我没有试图找出大小故障点的确切位置,但不确定这是否相关,因为 44kb 并不是一个不合理的大小。

通过在 BlazeDS 中打开调试模式,我可以看到对象及其属性正在序列化,并且一切看起来都很好。在 BlazeDS 中接收和处理调用以进行调试和发布构建测试。

有人对其他事情有想法可以尝试调试/解决这个问题吗?

平台测试是 BlazeDS 4、Flashbuilder 4.7、Websphere 8 服务器、iPhone (iOS 7.1.2)。尝试使用多个 Flex SDK 的 4.12 到最新的 4.13,但行为没有变化。

谢谢!

【问题讨论】:

  • 会不会是时间问题?生产服务器上的超时设置可能比开发时更严格?
  • 如果您在代码中处理故障处理程序,您可以显示服务出了什么问题。我太依赖超时了,我之前展示过非常巨大的远程对象......通常大约 10k-30k 行等,
  • 其实是同一台服务器。今天早上,经过一周的调试,我发现了问题所在。从调用返回的 Java 类型被定义为 ArrayList。将其更改为 List 解决了该问题。我不确定为什么 ArrayList 不是有效的返回类型,我一直在查看 Adob​​e 文档,但仍然不明白为什么这是无效的。而且,为什么它在调试模式下工作而不是在发布版本中工作更奇怪。也许有人可以向我解释这里的逻辑。

标签: actionscript-3 apache-flex flash-builder flex4.5 blazeds


【解决方案1】:

经过一周的调试,我发现了问题。

调用返回的 Java 类型被定义为 ArrayList。将其更改为 List 即可解决问题。

我不确定为什么 ArrayList 不是有效的返回类型,我一直在查看 Adob​​e 文档,但仍然不明白为什么这是无效的。而且,为什么它在调试模式下工作而不是在发布版本中工作更奇怪。也许有人可以向我解释这里的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多