I think I know so far CORBA specification是什么answered with yes here.不允许服务器程序使用的IDL与客户端程序使用的IDL之间存在任何差异。
但是,在实践中,某些差异绑定到工作(非常)普遍,因为底层的通信机制很可能是GIOP(至少是IIOP)和一些差异必然无法通过IIOP检测到。
我想要建立的是只要使用GIOP / IIOP,服务器和客户端IDL之间允许在任意ORB之间存在差异。
例如:到目前为止,我假设它适用于:
我的目标是为了获得类似于现有IDL中可以做的事情的简短列表,用新东西扩展“服务器”,而不必使用修改后的IDL重新编译现有客户端。
答案 0 :(得分:1)
是的,服务器和客户端方法集不需要完全匹配,因为方法是通过名称(GIOP消息中的操作字段)访问的,并且是独立的。换句话说,GIOP调用将方法名称包括为字符串,稍后参数将按此参数的预期进行编码。请参阅CORBA tie和CORBA stub的示例。
是的,如果您创建并导出新界面,它只是一个新界面。它可以独立于其他名称服务绑定到任何名称服务,而不知道这个新接口的客户端将无法使用它。将能够使用绑定到同一名称服务的已知类型。
是的,GIOP将枚举写为无符号长整数,第一个值始终编码为零,连续标识符按升序数字值,按从左到右的顺序排列。因此,附加新的枚举标识是完全安全的,但不能删除而不是重新排序。
阅读GIOP specification,帮助很多。查看由IDL编译器生成的代码以及在IDL中更改内容时它如何更改也非常好。
当然,仅仅因为缺乏关注而使用不匹配的IDL并不是一个好习惯,因为它也很容易引入不兼容的更改。这有任何意义,可能只有在您无法再访问并更新已发布给用户的客户端的情况下。