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.

Я не думаю, что у него проблемы с подключением; потому что функция ORB init() работает без проблем. Я также не думаю, что превышено допустимое количество подключений; это не имеет смысла. Он просто говорит 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