私の Corba 操作の 1 つは、union 型のシーケンス (2 次元配列) のシーケンスを返します。
テストでは、この操作は一度に返される 32 kB を超えるデータを処理できないことが判明しました。配列全体のサイズが 32 kB を超える場合、クライアント側の応答は 32 kB までしか正しくマーシャリング解除されません。その時点から、初期化されていないデータが取り込まれます (最終的にアンマーシャリングが失敗します)。
同じ環境で、より大きなサイズのデータを返すことができる他の操作があります。ただし、これはシーケンスのシーケンスを返す唯一の操作です。
一般に、Corba を介して転送されるシーケンスまたはデータの長さに制限はありますか?
私の環境は、32 ビット Java 6 クライアント (標準 Java ORB を使用) と 64 ビット サーバー (C、2AB ORB 実装) で構成されています。
私はこれまでに試しました:
クライアント側とサーバー側の両方で、関連していると思われるいくつかの Orb プロパティを微調整しました - タイムアウト設定 ( - タイムアウトを大きな数値にtransport.ORBTCPReadTimeout
設定)、GIOP 設定 ( - 両方とも大きな数値に設定)。これらの設定のいずれも動作を変更しませんでした。giop.ORBFragmentSize
giop.ORBBufferSize
パケット スニファを使用して、データがクライアントに送信されたことを確認できました。この問題は、アンマーシャリング中に発生します。