resolve_initial_references причинява SystemException

Използваме ActiveX контрола в нашия клиент, разработена с Visual C++ 6.0, в нашето приложение. Ние също използваме omniORB 2.7, за да осигурим връзка със сървърното приложение. Работи добре; но точно сега трябва да стартираме това приложение на 64-битов компютър с Windows 7. ActiveX контролата работи; но в C++ кода, когато извиква функцията resolve_initial_references на ORB, както е показано по-долу:

try 
{
    // Obtain a reference to the root context of the Name service:
    CORBA::Object_var initServ;
    initServ = orb->resolve_initial_references("NameService");
}   
catch(CORBA::ORB::InvalidName& ex)
{
    FormAndOpenHataDialog("Service Required is Invalid [does not exist] !", __FILE__, __LINE__);
    return CORBA::Object::_nil();
}
catch(CORBA::SystemException & ex)
{       
    FormAndOpenHataDialog(ex.NP_RepositoryId() , __FILE__, __LINE__);
    return FALSE;
}

Той хвърля SystemException. Не направи това на XP, 32-битови машини. Опитах се да открия причината за изключението; но всичко, което успях да измъкна, беше NP_RepositoryId(); и отпечатва: IDL:omg.org/CORBA/NO_RESOURCES.

Не мисля, че има проблем с връзката; защото функцията init() на ORB работи без проблем. Също така не мисля, че разрешеният брой връзки е надвишен; това няма смисъл. Просто пише NO_RESOURCES. Опитах се да отпечатам кода minor; но излиза празен. Какво друго мога да направя?

Редактиране: Стартирам сървърното приложение с тези: -ORBInitialHost 192.168.1.8 -ORBInitialPort 900 -BOAiiop_port 5140


person Halo    schedule 22.05.2013    source източник
comment
Вашето клиентско приложение правилно ли е конфигурирано да намира услугата за имена? Обикновено задавате InitRef във вашия omniORB конфигурационен файл, напр. InitRef = NameService=corbaname::host1.example.com.   -  person Brian Neal    schedule 22.05.2013
comment
В момента клиентът използва информация за ORBInitialHost и ORBInitialPort от регистъра.   -  person Halo    schedule 23.05.2013
comment
Току-що се опитах да изтрия тези записи в системния регистър на работеща машина; и получих същата грешка. Така че вече е ясно, че този нов компютър по някаква причина не може да получи информация за хоста и порта от регистъра   -  person Halo    schedule 23.05.2013
comment
Конфигурацията е в системния регистър, на ORL/omniORB/2.0; като ORBInitialHost и ORBInitialPort. Така сме използвали клиента досега.   -  person Halo    schedule 23.05.2013
comment
Добре, човече благодаря; решено е. Да; проблемът беше, че клиентът не можеше да намери информацията за хоста от регистъра. Ключът ORL трябва да е под ключа Wow6432Node за 32-битово приложение. Когато преместих ключа отдолу, той проработи.   -  person Halo    schedule 23.05.2013
comment
Страхотно, написах постфактум отговор. :)   -  person Brian Neal    schedule 23.05.2013


Отговори (1)


Изглежда, че вашият клиент има проблеми с намирането на първоначалната препратка към услугата за имена. Проверете как предоставяте тази информация на клиента, т.е. omniORB конфигурационен файл, променлива на средата, аргумент на командния ред или регистър (в Windows).

person Brian Neal    schedule 23.05.2013
comment
Ще го пренапиша тук: За 32-битов omniORB, ако получавате първоначалните препратки от регистъра; в 64-битов компютър информацията в регистъра, например ORL/omniORB/2.0, трябва да се намира под ключа Wow6432Node. Това е мястото, където приложението търси първоначални справки. - person Halo; 27.05.2013