gpt4 book ai didi

java - Corba 操作返回的序列大小是否有限制?

转载 作者:行者123 更新时间:2023-11-30 04:32:11 26 4
gpt4 key购买 nike

我的 Corba 操作之一是返回联合类型的序列(二维数组)的序列。

在测试中发现此操作无法处理一次返回超过 32 kB 的数据。如果整个数组大小超过 32 kB,则客户端的响应只能正确解码最多 32 kB。从那时起,它就会被未初始化的数据填充(最终导致解码失败)。

在相同的环境中,还有其他操作能够返回更大尺寸的数据。然而,这是返回序列的序列的唯一操作。

我应该注意通过 Corba 传输的序列或数据的长度是否有限制?

我的环境由一个 32 位 Java 6 客户端(使用标准 Java ORB)和一个 64 位服务器(C,具有 2AB ORB 实现)组成。

到目前为止我已经尝试过:

调整了客户端和服务器端的几个 Orb 属性,这些属性似乎相关 - 超时设置(transport.ORBTCPReadTimeout - 超时设置为一个很大的数字)、GIOP 设置(giop.ORBFragmentSizegiop.ORBBufferSize - 均设置为较大的数字)。这些设置都没有改变行为。

使用数据包嗅探器,我可以确认数据已发送到客户端。问题发生在解码过程中。

最佳答案

CORBA 无界序列实际上是有一点界的 - 但还不足以让您注意到它。

它们被编码为无符号长整型(或用 CORBA 术语来说,CORBA::ULong),它告诉编码引擎每个元素接下来将出现多少次。它应该始终能够包含最多 2,147,483,647 个元素(即 2^32,CORBA::ULong 的大小)。这比 32kb 多得多,所以听起来您的 ORB 有错误。

此外,它通过部分填充而不是抛出 CORBA::MARSHAL 异常而默默地失败,这一事实非常糟糕。告诉您的 ORB 供应商开始进行基础测试。

关于java - Corba 操作返回的序列大小是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com