快速业务通道

BCB中Corba Name Service使用方法

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

由于在尝试用BCB 4访问NameService时,遇到了一些奇奇怪怪的问题,而Visibroker所带的例子却可以用bcc32正常编译运行,俺决定从头做一个程序看看问题出在哪里。折腾了一夜,结论是做服务器还是不用Corba Server wizard好。(我还是不明白为什么?)

1、File| New, Multitier,Corba IDL File:

interface Order{
string Name();
};

存为order.idl

2、File|New, Consol Wizard,生成一个无vcl支持的consol应用。

3、Project|Add to project,选上刚写的order.idl,Project | Compile之。

4、File|New, Miltitier, Corba Object Implementation,IDL选刚写的order.idl,Interface选Order,为简明起见,其它的名字就不改了。确定,自动生成OrderServer.cpp。

5、在OrderServer.cpp中找到char* OrderImpl::Name(),在其函数体中写:

return "Hi, I am Test CorbaServer";

6、File | Save All,Unit1.cpp存为tcnServer.cpp,Project存为tcnServer.bpr。然后Make之。一个简单的Corba Server就做好了。

7、测试运行一下,然后在MS-Dos方式下运行osfind.exe(应该在path里,否则到$(VBroker)\bin里找),这时会显示一系列的corba信息:

C:\>osfind
osfind: Found one agent at port 14000
     HOST: YANGWU
osfind: Found 1 OADs in your domain
HOST: YANGWU
osfind: Following are the list of Implementations registered with OADs.
     HOST: YANGWU
         REPOSITORY ID: IDL:CorbaTester/DBServer2Factory:1.0
             OBJECT NAME: DBServer2
osfind: Following are the list of Implementations started manually.
HOST: YANGWU
         REPOSITORY ID: IDL:Order:1.0
             OBJECT NAME: OrderObject
         REPOSITORY ID: IDL:visigenic.com/Activation/OAD:1.0
             OBJECT NAME: 61.132.58.166

8、确定无误后,回到IDE中,打开tcnServer.CPP,在#include的最后部分加上:

#include "CosNaming_c.hh"

然后,Project | Add To Project,将$(VBroker)\lib\name_br.lib加到工程中,这时tcnServer.CPP的顶部分出现USELIB("..\..\..\vbroker\lib\name_br.lib"); 一行代码。其中的path与你的Visibroker安装目录及工程的保存位置都有关,以你的BCB生成的代码为准。

9、boa->obj_is_ready(&order_OrderObject);一句(如无意外应为26行),在这一行和下边的注释// Wait for incoming requests之间加上以下代码段,完成NamingContext建立、Name建立、Name绑定的工作:

//获取由命令行参数传入的NameComponent

const char* id = argv[1];

const char* kind = argv[2];

//取得默认的NamingContext对象

CosNaming::NamingContext_var context = CosNaming::NamingContext::_bind();

//生成一个Name对象

CosNaming::Name name;

//设定Name中只包含1个{id,kind}的NameComponet

name.length(1); name[0].id = id; name[0].kind = kind;

//将该名字绑定给程序中建立的对象实例order_OrderObject

context->bind(name, &order_OrderObject);

//在consol上输出已经绑定的名字。

cout << "The object is bound: \"" << name[0].id << "\" \"" << name[0].kind << "\"" << endl;

10、File | Save All,Project | Make之。

11、测试运行:进入MS-DOS方式,

start nameextf MyTester test.log //启动NamingContext Factory

start tcnServer MyName MyKind //启动服务器,指定其名字为{MyName, MyKind}

再用osfind查看就会发

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号