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