文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>6.Naming Service(使用命名服务)

6.Naming Service(使用命名服务)

时间:2006-07-28  来源:lzhw_lucky

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 3.      Carlos O'Ryan. TAO's Naming Service. http://www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/docs/tutorials/Quoter/Naming_Service/index.html 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  

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=855887

相关阅读 更多 +
排行榜 更多 +
木雕高高手中文版

木雕高高手中文版

休闲益智 下载
我不是飞剑安卓版

我不是飞剑安卓版

休闲益智 下载
愤怒的小鸟梦幻爆破安卓最新版

愤怒的小鸟梦幻爆破安卓最新版

休闲益智 下载