12.01.2017, 18:18 | #1 |
Участник
|
DAX 2009 не ждет выполнения .NET кода
DAX 2009. Подключена сборка .NET 3.5 (зарегистрирована в GAC).
Часть функционала сборки - это отправка данных на веб-сервер и возврат ответа (операция длится пару секунд). X++: ... if(!crm.GetCrmStatus()) { info('Server offline'); } else { info('Server online'); } ... Как заставить АХ ждать завершения операции и выполнить оставшийся код? Последний раз редактировалось syl; 12.01.2017 в 18:24. |
|
12.01.2017, 18:26 | #2 |
Участник
|
Похоже какое то исключение вылетает но не ловится аксаптой.
Попробуйте хотя бы в целях диагностики сделать свою сборку - обертку над указанной в которой ловите все исключения. Тогда можно понять что там не так. |
|
12.01.2017, 18:32 | #3 |
Участник
|
У меня рядом с аксаптой лежит консольное приложение которое использует ту же сборку, оно работает нормально.
Внутри сборки все ошибки отлавливаются, при любом исключении должен вернуться результат... Дело в том что сама операция выполняется синхронно и достаточно долго (установка соединения длится порядка 3-5 секунд). Но АХ просто прекращает выполнение... |
|
12.01.2017, 19:10 | #4 |
Участник
|
.NET-код не обязан вам вернуть то исключение, которое вы ожидаете.
Если код в АХ прерывается, значит исключение все-таки имеет место. .NET вернет вам целую кучу необработанных исключений. И если в вашем консольном приложении все выглядит хорошо, в АХ появляются подводные камни, о которых вы и не догадываетесь. Когда-то сделал себе метод для АХ4, который выводит исключения .NET в инфолог. X++: public void clrWarning() { Microsoft.Dynamics.BusinessConnectorNet.BusinessConnectorException lastException; ; lastException = ClrInterop::getLastException(); while(lastException) { warning(lastException.get_Message()); lastException = lastException.get_InnerException(); } } X++: try { new InteropPermission(InteropKind::ClrInterop).assert(); // ... CodeAccessPermission::revertAssert(); } catch (Exception::CLRError) { this.clrWarning(); }
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Logger (1), syl (1). |
12.01.2017, 19:18 | #5 |
Участник
|
Так и сделал, нашел ошибку, не видело одну из зависимостей сборки. Добавил ее в GAC, теперь другая проблема, из Job'а все работает нормально, а из batch'а - та же ошибка...
|
|
12.01.2017, 19:32 | #6 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: syl (1). |
12.01.2017, 19:57 | #7 |
Участник
|
|
|
12.01.2017, 22:20 | #8 |
Участник
|
|
|
13.01.2017, 13:05 | #9 |
Участник
|
|
|
13.01.2017, 14:44 | #10 |
Участник
|
Как это вы прямо на сервере работаете?
Если у вас 2-звенка, проблем вообще не возникнет. Сформулируем по-другому вопрос. Сборка у вас стоит там же, где AOS крутится?
__________________
// no comments |
|
14.01.2017, 02:57 | #11 |
Участник
|
Проблема может быть в приведении типа System.Boolean к boolean.
Проверьте конструкцию: X++: boolean ret;
ret = crm.GetCrmStatus();
if(! ret)
{
:(
}
else
{
:)
} |
|
18.01.2017, 13:01 | #12 |
Участник
|
|
|
26.01.2017, 11:37 | #13 |
Участник
|
Может проблема с деплоем DLL?
|
|
|
|