跳轉到內容

ACE+TAO 開源程式設計筆記/在命名伺服器上查詢服務

來自華夏公益教科書

在您的命名服務(和其他服務執行)之後,可以透過嘗試以下操作來測試您的服務是否存在

tao_nslist -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService

這應該會產生以下輸出

Naming Service:
---------

您的命名服務將顯示在虛線下方。

現在要真正連線這兩個應用程式。為了使我們之前的示例命名服務生效,我們需要新增程式碼以連線到命名服務,然後,在該上下文中解析我們的服務。以下程式碼替換了從命令列引入 IOR 的程式碼,使用從命令列獲取的可讀 URL 解析對工廠物件的引用,該 URL 從重啟到重啟是持久存在的。以下是我們將應用的程式碼片段

#include "corbalocC.h"
#include "orbsvcs/CosNamingC.h"

#include "ace/SString.h"

ACE_TString corbaloc_url_;
CosNaming::NamingContextExt_var naming_context_;
corbaloc_url_ = argv[1];

// Get a reference to the Naming Service
CORBA::Object_var naming_context_object =
orb->string_to_object (corbaloc_url_.c_str());

// Narrow to get the correct reference
naming_context_ =
CosNaming::NamingContextExt::_narrow (naming_context_object.in ());

//Setup to get service from within the naming context
CosNaming::Name name (1);

name.length (1);
name[0].id = CORBA::string_dup ("Widgits");

// Resolve the name
CORBA::Object_var factory_object =
naming_context_->resolve (name);

// Narrow
corbaloc::Status_var factory =
corbaloc::Status::_narrow (factory_object.in ());

//And use as desired
factory-> ... do something

請注意,程式碼可能是完全通用的,可以放在可重用的函式中。程式碼中唯一兩個原始部分是從命令列提取的 URL 以及表示遠端類名稱的字串“Widgets”。

./client corbaloc::localhost:12345/NameService

在這個示例中,所有內容都在一個框內,但在現實中,這些服務不需要執行在相同的硬體上,它們只需要透過指定的埠可訪問即可。現在,讓我們看一下客戶端程式碼。

華夏公益教科書