Решение проблемы найдено. Правдо, сильно кривоватое...
Необходимо зарегистрировать AxaptaCOMConnector как COM+. Как правило, в настроечных утилитах этот пункт недоступен, поэтому регистрировать придется вручную.
После этого, процедура закрытия сессии выглядит так:
X++:
Com axCom;
;
axCom = new COM('AxaptaCOMConnector.Axapta2');
axCom.Logon2(...);
( )
axCom.logoff();
try
{
axCom.stop();
}
catch (exception::error)
{
// в случае ошибки удаляю последнюю строку infolog,
// которая генерится автоматически ошибкой COM
if (infolog.line())
{
infolog.clear(infolog.line()-1);
}
}
На методе axCom.stop() генерится ошибка COM - "Не найдено описание события" и соединение балгополучно разрывается.
Если же не давать команду axCom.stop(), то, по непонятным причинам, соединение разорвано не будет.
Кстати, признаком того, что осталось висеть не разорванное в предыдущем сеансе соединение является то, что новое соединение вернет номер сессии равный 65535 и в списке процессов останется висеть процесс dllHost.exe от имени пользователя. Убиение этого процесса также разрывает соединение.
Процесс dllHost.exe - это процесс, вызвываемый при работе COM+. При работе через обычный COM данный процесс не запускается.