到目前为止,我认为我所知道的是,CORBA 规范本身不允许服务器程序使用的 IDL 和客户端程序使用的 IDL 之间存在任何差异。
然而,在实践中,某些差异必然会(相当)普遍起作用,因为底层的通信机制很可能是 GIOP(至少是 IIOP),并且某些差异必然无法通过 IIOP 检测到。
我想确定的是,只要使用 GIOP/IIOP,在任意 ORB 之间普遍允许服务器和客户端 IDL 之间存在哪些差异。
例如:到目前为止,我认为它适用于:
- 只要不触及客户端 IDL 知道的类型或将任何未知的新类型发送回客户端,就可以将任何类型/接口添加到服务器 IDL。
- 将方法添加到服务器端的现有接口——客户端应该能够继续使用此接口调用对象,即使他的 IDL 没有列出所述方法。(这似乎在这里得到了肯定的回答。)
- 只要客户端永远不会看到这个新值,就在枚举的末尾添加一个成员。
- 将成员添加到 union,只要客户端永远不会看到此 Union 类型并将鉴别器设置为新值。
我的目标是得到一个可以在现有 IDL 中做的事情的简短列表,用新的东西扩展“服务器”,而不必用修改后的 IDL 重新编译现有的客户端。