【问题标题】:OmniORB C++ client. Cannot connect to two different serversOmniORB C++ 客户端。无法连接到两个不同的服务器
【发布时间】:2015-07-27 14:00:21
【问题描述】:

我们正在使用 omniORB 库开发 C++ CORBA 客户端。

我们的应用程序需要连接到两个不同的服务器,每个服务器都托管在不同的机器上。为此,我们使用两个CORBA::ORB_ptr 变量。有趣的是,当我们连接到一台服务器时,我们的程序似乎可以正常工作,但是当一个ORB_ptr 处于活动状态时,尝试连接到第二台服务器会给我们一个CosNaming::NamingContext::NotFound 异常。

【问题讨论】:

  • 天哪!还有人在做CORBA吗? OmniOrb 是否保留日志文件?您是否尝试过任何其他球体,例如 ACE/TAO?
  • 或者试试TAOX11,C++11语言映射会为你节省很多时间

标签: c++ corba omniorb


【解决方案1】:

您不应该需要 ORB 变量来连接到两台服务器,您需要两个对象引用,每个服务器一个,可以使用一个 ORB 完成。对于这两个服务器,您必须从例如命名服务中检索对象引用,将它们缩小到正确的类型,然后您就可以使用它们。

查看 CORBA 书籍,例如查看 http://www.ciaranmchale.com/corba-explained-simply 或查看发行版提供的示例/测试。

【讨论】:

  • 据我所知,您需要 ORB_ptr 对象才能使用 CORBA::ORB_init() 函数连接到服务器。使用它,您可以获得对服务器根命名上下文的引用,然后解析实际名称,从而为您提供提供所需功能的真实服务器对象。因此,要从两台服务器获取数据,您需要从两个 OBR_ptr 变量开始,并以两个服务指针结束。问题是,如果一个连接,那么无论哪个先连接,另一个都会失败。
  • 您首先需要一个 ORB_ptr 是正确的。但是,使用这个 ORB_ptr 您可以多次调用命名服务,每次调用都会返回不同的对象引用。您的服务器是否在命名服务中正确注册了自己?每个实例都必须使用不同的名称注册自己。
  • 一定是有什么误解,当我提到两个不同的服务器时,我的意思是不同的主机和不同的端口。我说的不是同一个 CORBA 服务器提供的两种服务。
  • 是的,这也是我的意思。您的客户端进程只需要一个 ORB,它可以毫无问题地连接到两个服务器。
猜你喜欢
  • 2015-08-21
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多