我想向现有服务器的 CORBA 接口添加一个方法。这需要重新编译所有客户端吗?

我用的是TAO

有帮助吗?

解决方案

不需要重新编译客户端(也不应该这样做,无论您使用什么 ORB)。正如 Adam 所指出的,查找是通过操作名称完成的(直接文本比较)。

我已经使用我们基于 ACE/TAO 的系统完成了您所描述的操作,并且没有遇到任何问题(服务器采用 ACE/TAO C++,客户端采用 ACE/TAO C++、使用 Borland 的 Janeva 的 C# 和 OmniORBPy)。

其他提示

假设客户端和服务器通过 IIOP 进行通信,则不需要重新编译。IIOP 消息包含接口名称、方法名称和参数。如果这些事情都没有改变,那么一切都应该保持兼容。向接口添加另一个方法不会改变任何现有的东西。

另一方面,如果您的对象使用不同的协议,或者客户端正在与服务器进行进程,从而绕过 IIOP,您可能需要确保所有内容都重新编译。

操作(方法)是按名称查找的,因此您只需重新编译使用新操作的客户端即可。

使用主机托管的客户端(即在 ORB 中启用并置的同一进程中运行)必须重新编译。远程客户端可能保持不变 - 如前所述,方法通过符号名称进行匹配。

这取决于新 idl 方法的使用。如果 Corba 调用是静态的(SII),这意味着您的客户端与存根链接,如果您想使用新添加的方法接口,则必须重新编译存根。

如果 corba 调用是动态的(DII),则客户端不需要存根。不需要重新编译。在这种情况下,您的客户端代码应如下所示:

     remoteObjRef->invoke("methodname", args); // send("methodname", args)

我四年前进行了 CORBA DII 调用,它与 TAO 客户端和 TAO/Jacorb/IONA corba 服务配合使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top