1

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

在一项测试中,结果证明此操作一次无法处理超过 32 kB 的返回数据。如果整个数组大小超过 32 kB,则客户端的响应只能正确解组至 32 kB。从那时起,它由未初始化的数据填充(最终使解组失败)。

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

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

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

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

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

使用数据包嗅探器,我可以确认数据已发送到客户端。该问题发生在解组期间。

4

1 回答 1

2

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

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

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

于 2013-01-20T01:22:59.253 回答