【CORBA】连接两台服务器的问题

hello_tony 2010-12-09 09:03:14
写了一个corba程序,由于特殊需要,服务分散在两台主机上,现在客户端要连接这两台主机进行通信。
启动客户端的命令行是这样的 app.exe -ORBInitRef NameService=corbaloc:iiop:host1:1060,iiop:host2:1060/Nameservice
但是这样只能获得host1的nameservice,第二台报异常CosNaming::NamingContext::NotFound,

客户端先调用:
void init(int argc,char* argv[]){
QString arg;
for(int i=0;i<argc;i++){
arg = arg+QString::number(i,10)+QString(argv[i]);
}
QMessageBox::information(0,"arg",arg);
try
{
CORBA::ORB_var orb = CORBA::ORB_init(argc,argv);
CORBA::Object_var obj = orb->resolve_initial_references("NameService");
inc = CosNaming::NamingContextExt::_narrow(obj);
cout<<"Got NameService."<<endl;
}
catch (const CORBA::Exception&)
{
cerr<<"Uncaught CORBA exception."<<endl;
QMessageBox::warning(0,"w","init CORBA::Exception");
}
}

然后分别调用:getQuery()和getPayAC()
AB::Query_var getQuery(){
CORBA::Object_var object;

if(CORBA::is_nil(query)){
CosNaming::Name name;
name.length(1);
name[0].id = CORBA::string_dup("Query_JAVA");

try{
object = inc->resolve(name);
query = AB::Query::_narrow(object);
cout<<"Get a handle of Object Query."<<endl;
}catch(CosNaming::NamingContext::NotFound& ex){
cerr<<"Context not found."<<endl;
QMessageBox::warning(0,"AB","CosNaming::NamingContext::NotFound");
} catch(CORBA::TRANSIENT& ex) {
cerr << "Caught system exception TRANSIENT -- unable to contact the "
<< "naming service." << endl
<< "Make sure the naming server is running and that omniORB is "
<< "configured correctly." << endl;
QMessageBox::warning(0,"AB","CORBA::TRANSIENTException");
}
catch(CORBA::SystemException& ex) {
cerr << "Caught a CORBA::" << ex._name()<< " while using the naming service." << endl;
QMessageBox::warning(0,"AB","CORBA::SystemException");
}
return query;
}
}


AC::PayAC_var getPayAC(){

CORBA::Object_var obj = orb->resolve_initial_references("NameService");
inc = CosNaming::NamingContextExt::_narrow(obj);


CORBA::Object_var object;

if(CORBA::is_nil(pay)){
CosNaming::Name name;
name.length(1);
name[0].id = CORBA::string_dup("PayAC_JAVA");

try{
object = inc->resolve(name);
pay= AC::PayAC::_narrow(object);
cout<<"Get a handle of Object PayAC."<<endl;
}catch(CosNaming::NamingContext::NotFound& ex){
cerr<<"Context not found."<<endl;
QMessageBox::warning(0,"AC","CosNaming::NamingContext::NotFound");
} catch(CORBA::TRANSIENT& ex) {
cerr << "Caught system exception TRANSIENT -- unable to contact the "
<< "naming service." << endl
<< "Make sure the naming server is running and that omniORB is "
<< "configured correctly." << endl;
QMessageBox::warning(0,"AC","CORBA::TRANSIENTException");
}
catch(CORBA::SystemException& ex) {
cerr << "Caught a CORBA::" << ex._name()<< " while using the naming service." << endl;
QMessageBox::warning(0,"AC","CORBA::SystemException");
}
return pay;
}
}

我猜测是两台主机需要两个上下文环境,现在问题是根据命令行参数怎么得到两台主机上的对象。求大侠不吝赐教~~
...全文
117 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueEngine 2011-01-08
  • 打赏
  • 举报
回复
我也有此需求,但却没有找到解法,关注。

1,220

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧