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

hello_tony hello_tony 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
写了一个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;
}
}

我猜测是两台主机需要两个上下文环境,现在问题是根据命令行参数怎么得到两台主机上的对象。求大侠不吝赐教~~
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
hello_tony
中间件 1,237 成员 6,839 内容