CORBA Programming with TAO - 6.Naming Service(使用命名服务)

CORBA Programming with TAO - 6.Naming Service(使用命名服务)
摘要:
命名服务(Naming Service)是CORBA定义的诸多服务中比较常用的一个, Naming Service提供的助记符解析服务使得应用程序可以借助助记符,而不是一大串IOR来访问到相应的Servant。
一、简介
直接将IOR串在程序间传递的做法往往比较不方便,特别是,对于非持久servant来说,每次重启Server程序时,这个IOR都会发生变化,在使用上比较不便,而且,当我们需要访问的servant不是一个,而是多个时,使用IOR就更加不便了。为此,CORBA定义了Naming Service服务,命名服务(Naming Service,不过大家叫的更多的是命名服务)是CORBA最基本的服务之一。Server程序将servant注册到Naming Service中,Client程序就可以借助助记符,而不是一大串IOR来访问到相应的Servant了。
TAO对标准的名字服务进行了扩展,使得可以利用multicast来得到名字服务。此外,TAO还提供了NT_Naming_Service,可以将名字服务注册为NT服务进行管理。
二、启动Naming Service
名字服务的文件名为:Naming_Service.exe,它的启动参数有:
% Naming_Service [-ORBNameServicePort nsport]
[-o ior_output_file]
[-p pid_file_name]
[-s context_size]
[-t time]
[-f persitence_file_name]
[-b base_address]
[-m (1=enable multicast responses,0=disable(default)]
 
-ORBNameServicePort nsport:指定名字服务监听multicast包的端口号。只有在使用了 '-m 1'时才有效.
-o ior_output_file: 指定文件名,用来保存名字服务的根上下文的IOR.
-p pid_file_name: 指定文件名,用来保存名字服务程序的进程id
-s context_size: 当创建上下文时, 指定新上下文使用的哈希表的大小,默认1024
-t time: 名字服务监听的时间,单位:秒。默认: 无限
-f persistence_file_name: 指定文件名,用来存放名字服务中被绑定的对象引用。
-m (1=enable multicast responses, 0=disable(default): 是否使用多播功能。
 
运行名字服务时,可以使用-ORBEndpoint参数来指定其运行的端点(有关-ORBEndpoint的详细内容参见文档: $TAO_ROOT/docs/ORBEndpoint.html):
 
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -ORBEndpoint iiop://localhost:2809 -m 0
(名字服务在本机的2809端口监听请求,不使用多播方式)
 
若要使用多播方式启动Naming_Service时,只需执行
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 1
三、参数配置
启动完成后,Naming Service就默默在那里工作了,但是,你的servant和client如何访问它呢?
要在Server和Client程序中访问NameService有两种方法:
1、配置InitRef信息:
可以在启动程序时通过-ORBInitRef来指定,如:
-ORBInitRef NameService=IOR:00ff...
或使用corbaname,如:
-ORBInitRef NameService=corbaname::localhost:2809
指定NameService在本机的默认端口上监听。
也可采用corbaloc来指定NameService的运行信息,如:
-ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809/NameService
在这里,corbaloc/corbaname被用于以更具有可读性的方式来定位servant,关于corbaname、corbaloc的更为详细的信息见参考6。
 
配置好InitRef后,程序中就可以通过:
orb->resolve_initial_references("NameService");
访问到NameService了。
2、访问Naming Service的另一种方式则是传递Naming Service的IOR串,然后通过:
orb->string_to_object(...);
从IOR串连接到相应的Naming Service,因为NameService只不过是一个特殊的servant。
四、实例
下面新建一个工程eg2_svr,添加到当前Solution,在该工程中添加一个名为eg2_svr.cpp的文件(由于代码较多,文件内容略,详见附件),使该工程依赖于前面的idl工程。由于这是一个Server程序,并且还要用到命名服务,需要链接以下两个链接库:
TAO_CosNamingd.lib
TAO_PortableServerd.lib
编译该工程。
新建一个eg2_cli工程,添加到当前Solution,在该工程中添加一个名为eg2_cli.cpp的文件(由于代码较多,文件内容略,详见附件),使该工程依赖于前面的idl工程,并在工程链接选项中添加TAO_CosNamingd.lib,以使用命名服务,编译该工程。
在Server程序中,我们在创建好servant object后,将其bind到了Naming Service中;在Client程序中,通过resolve助记符,我们从Naming Service那里取得了servant的IOR信息,进而便可与相应的servant进行连接。
在这里Naming Service一定程度上扮演了一个DNS的角色,DNS完成了地址到IP的转换,而Naming Service完成的则是助记符到IOR的转换。
 
下面是几组正确的启动Naming Servie和eg2_svr/eg2_cli的方法:
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 1
eg2_svr
eg2_cli
 
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_svr -ORBInitRef NameService=iioploc://localhost:2809/NameService
eg2_cli -ORBInitRef NameService=iioploc://localhost:2809/NameService
 
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_cli -ORBInitRef NameService=corbaname:iiop:1.2@localhost:2809
eg2_svr -ORBInitRef NameService=corbaname::localhost
 
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_cli -ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809
eg2_svr -ORBInitRef NameService=corbaloc::localhost
(注: iiop 协议标记可以省略,另 IANA 已将 2809 端口分配给 corbaloc ,当服务程序在该端口上监听时可以省略端口号。)
五、其它
%TAO_ROOT%/utils目录下有两个工具:NameViewer/nslist,可用于查看当前Naming_Service中注册的NamingContext的信息,其中NameViewer是一个基于MFC的可视化的工具,如果你使用的是VC2005 Express将无法编译该工程。
此外,该目录下还有一个工具catior可用于查看IOR的详细信息,你可以指定一个存有IOR信息的文件作为输入参数(catior -f file_name)或者在Naming_Service运行过程中,指定一个有效的NamingContext作为参数,如:
catior -n test.my_context/Echo.Object
 
参考:
1.       Duncan Grisby, Sai-Lai Lo, David Riddoch. The omniORB Version4.0 User's Guide. http://omniorb.sourceforge.net/omni40/omniORB.pdf
2.       OMG. Naming Service Specification, V1.3. http://www.omg.org/cgi-bin/apps/doc?formal/04-10-03.pdf
4.       Object Computing, Inc. TAO FAQ. http://www.theaceorb.com/faq/index.html
5.       Mentoya. TAO使用指南. http://www.huihoo.com/ace_tao/tao_guide.html
6.       Ciaran McHale. The corbaloc and corbaname URLs. http://www.iona.com/devcenter/corba/corbaloc.pdf
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值