Показать сообщение отдельно
Старый 31.08.2007, 11:53   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Решение проблемы
Решение проблемы найдено. Правдо, сильно кривоватое...

Необходимо зарегистрировать 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 данный процесс не запускается.