我的一个Corba操作是返回一个联合类型的序列(二维数组)序列。
在一次测试中,结果发现这个操作不能同时处理超过32 kB的数据。如果整体阵列大小超过32 kB,则客户端的响应只能正确解组,最高可达32 kB。从那时起,它被未初始化的数据填充(最终使解组失败)。
在相同的环境中,还有其他操作可以返回更大尺寸的数据。然而,这是返回序列序列的唯一操作。
我应该注意一般通过Corba转移的序列或数据的长度是否有限制?
我的环境包括一个32位Java 6客户端(使用标准Java ORB)和一个64位服务器(C,带有2AB ORB实现)。
到目前为止我已经尝试过了:
在客户端和服务器端调整了几个Orb属性,这似乎是相关的 - 超时设置(transport.ORBTCPReadTimeout
- 超时设置为大数),GIOP设置(giop.ORBFragmentSize
,giop.ORBBufferSize
- 两者都设置为大数)。这些设置都没有改变行为。
使用数据包嗅探器,我可以确认数据已发送到客户端。在解编期间会出现问题。
答案 0 :(得分:2)
CORBA无界序列实际上有点受限 - 但还不够,你应该注意到它。
它们被编组为无符号长(或以CORBA术语,CORBA::ULong
),它告诉编组引擎每个元素将在网络下面出现多少次。它应该始终能够包含多达2,147,483,647个元素(即2 ^ 32,大小为CORBA::ULong
)。这大概超过32kb,所以听起来你的ORB有一个bug。
此外,它通过部分填充而不是抛出CORBA::MARSHAL
异常而无声地失败的事实非常糟糕。告诉您的ORB供应商开始测试基础知识。