在我們開發CORBA產品過程中,常常碰到網絡鏈路無法鏈接問題。排除防火牆的干擾和相應的端口打開(10003),並且使用TCP/IP工具測試時,網絡情況都是好的。因爲CORBA中間件過程比較複雜,很多開發人員碰到一些疑難問題,失去了深入探討問題根源的信心。
當一個優秀的產品開發過程,考慮的複雜環境程度侷限於理想情況,不因爲出現一些問題而我們就全盤否定。正如微軟的操作系統在不斷地升級和優化,常常發佈很多補丁包,這也充分地說明它仍舊存在一些問題。
如果您使用ORBACUS產品開發,可能存在下列出現的問題。
1、解決工作組和域名之間的問題
當工作組與域計算機實現CORAB中間件,可能出現CORBA中間件無法通信。
在工作組的計算機C:\Windows\System32\drivers\etc(注意不同的WINDOWS操作系統系統文件)文件夾下修改hosts文件:
…
…
192.168.1.200 PC-2 #增加域名與IP地址映射
2、解決多塊網卡地址綁定問題
當PC-1運行CORBA程序時,orbacus產品的IIOP協議中的profile_host會優先綁定到10.7.126.7第一塊網卡地址。10.7.126.7是對外的一個網卡,按道理應該是10.110.42.3。這是ORBACUS產品本身有點問題,現做如下修改:
1)orbacus4.1.2產品修改:
A、ORBinit.cpp行數:861,增加如下語句
else if(strcmp(key, "ooc.orb.canonical.localhost") == 0)
{
// Ignore -- handled in GetCanonicalHostname
}
B、net.cpp函數char* OB::GetCanonicalHostname(bool numeric):行數:415,
增加如下語句
OB::Properties_var properties = OB::Properties::getDefaultProperties();
const char *canonicalhost = properties -> getProperty("ooc.orb.canonical.localhost");
if (canonicalhost)
{
int i = 0;
while (ent->h_addr_list[i] != NULL)
{
struct in_addr in;
in.s_addr = *((u_long *)(&ent->h_addr_list[i][0]));
char *localhost = string_dup(inet_ntoa(in));
if (strcmp(localhost, canonicalhost) == 0)
{
host = string_dup(localhost);
break;
}
i++;
}
}
C、當發生此情形需要在orbacus.cfg增加語句過濾:
# 防止主機有多塊網卡時,默認指定的第一塊網絡無效.
ooc.orb.canonical.localhost=10.110.42.3
2)orbacus4.3.4產品修改:
A、ORBinit.cpp行數:946,增加如下語句
else if(strcmp(key, "ooc.orb.canonical.localhost") == 0)
{
// Ignore -- handled in GetHostString
}
B、net.cpp函數char*
OB::GetHostString(bool numeric, bool preferIPv6)
throw(CORBA::COMM_FAILURE, CORBA::NO_MEMORY)
行數:1515,增加如下語句
OB::Properties_var properties = OB::Properties::getDefaultProperties();
const char *canonicalhost = properties -> getProperty("ooc.orb.canonical.localhost");
if (canonicalhost)
{
for (;;)
{
char *localhost = GetIPString((*it) -> ai_addr, (*it) -> ai_addrlen);
if (strcmp(localhost, canonicalhost) == 0)
{
host = CORBA::string_dup(localhost);
break;
}
if (*(++it) == 0)
{
break;
}
}
}
C、當發生此情形需要在orbacus.cfg增加語句過濾:
# 防止主機有多塊網卡時,默認指定的第一塊網絡無效.
ooc.orb.canonical.localhost=10.110.42.3
3、結束語
以上情形是orbacus調試過程中發現的一些網絡問題,希望本文給您在相應產品開發過程中帶來幫助。