在我们开发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调试过程中发现的一些网络问题,希望本文给您在相应产品开发过程中带来帮助。