CORBA技术及在Delphi中的实现(二)

日期: 2007-12-27 作者:秦志强 来源:TechTarget中国

  3、 Org

  ORG(Object Request Broker)常被称作一组服务的类名称,这组服务用于连接客户和服务器,并在客户和服务器之间来回传递方法调用和信息。

  因为ORG是在DLL里实现的,所以,它们驻留在服务器和客户实现的处理中,它们必须安装在所有使用CORBA的客户及服务器上。

  4、 Smart Agent?

  Smart Agent是一项用来帮助客户自动对一个服务器进行定位的目录服务。其宗旨在于帮助客户机连接到服务器上,并执行其他一些类似负载均衡和重启崩溃对象这样的重要任务。即:Smart Agent具有目录服务,它能查出对象的位置,并把客户程序接到这些对象上。

  5、 代理、存根和框架

  在一个分布式的应用程序里,客户不能直接与服务器通信,同样一个服务器也不直接与客户交流。函数的调用及其参数都必须通过网络从一个应用程序中调度到另一个应用程序里。为了使该体系工作,客户和服务器两边都要建立一个代理。客户这边的代理称为存根(Stub),而服务器的代理则叫框架(Skeleton)。

  存根实现方法如下:

  function TcorbaTestObjectStub.GetName:WideString;

  var

  OutBuf:ImarshalOutBuffer;

  InBuf:ImarshalInBuffer;

  Begin

  Fstub.createRequest(‘GetName’,True,OutBuf);

  Fstub.Invoke(OutBuf,InBuf);

  Result:=UnmarshalWideText(InBuf);

  End;

  其中,Fstub数据成员来自于CorbaObj单元,在CorbaObj单元里它被声明为Istub类型。Fstub.createRequest方法用一个ImarshalOutBuffer类型的变量与想调用的函数的名字进行连接,这个变量可通过Internet传输。当该包建好后,就可以调用Invoke将信息传递到服务器并从同一个服务器中得到反馈信息。ImarshalInBuffer类型的InBuf变量包含了该反馈信息,可以调用UnmershalWideText。

  框架的目的在于接收由存根对Invoke的调用而传来的消息。当它收到消息后,就调用真正的GetName方法,接着把结果包装起来迅速传给客户,实现方法如下:

  Procedure

  TcorbaTestSkeleton.GetName(constInBuf:ImarshalInBuffer;Cookie:Pointer);

  Var

  OutBuf: ImarshalOutBuffer;

  Retval: WideString;

  Begin

  Retval:=Fintf.GetName;

  Fskeleton.GetReplyBuffer(Cookie,OutBuf);

  OutBuf.PutWideText(PwideChar(Pointer(Retval)));

  End;

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐