AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2015, 05:26   #1  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
можно упаковать несколько документов в одно сообщение
Насколько я понял речь идет про custom сервис, а не стандартные AIF документы.

Цитата:
НО: если хоть где-то в коде выбросится ошибка или вызов ttsabort, то соответственно ни лога, ни данных...
Можно выйти из транзакции которую AIF создает (ttscommit), try/catch вокруг вызова вашего класс и зайти обратно (ttsbegin). Также проверьте appl.ttsLevel(). Класс должен правильно с транзакциями работать (открывать-закрывать).

Посмотрите как AIF вызывает ваш метод в AifWcfProcessor, сделайте трейс.
И как транзакция открывается/закрывается -

AifRequestProcessor.processWcfRequest - AIF делает ttsbegin в конце
AifRequestProcessor.processWcfResponse - AIF делает ttscommit в начале

Имейте ввиду что AIF логика может быть разная для Basic и Enhanced портов.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
За это сообщение автора поблагодарили: Logger (1), sgt.Pepper (1), A_BAS (2).
Старый 19.11.2015, 15:24   #2  
ex3em is offline
ex3em
Участник
 
38 / 19 (1) ++
Регистрация: 22.07.2008
В методе который выполняется AIF запускайте thread.
Старый 26.04.2016, 20:32   #3  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Если кому интересно, нашел решение проблемы (спасибо подсказке Alex_KD).

При вызове сервиса AIF создает "глобальную" транзакцию, соттветственно если что-то случается в самом сервисе, все try-catch блоки самого сервиса просто игнорируются и идут выше в обработчики AIF, где собственно было начало транзакции. Все попытки использовать catch Error, ClrError, Internal и просто catch не увенчались успехом.

Что сделано:
в точке входа сервиса сделал проверку на уровень tts и сразу сделал ttscommit.

X++:
ttsInitialLevel = appl.ttsLevel();
if(ttsInitialLevel > 0)
{
    ttscommit;
    ttsbegin;
}
...
Дальше открыл свою транзакцию и запускаю логику. Если код где-то валится, то управление уже не передается выше в AIF, а срабатывают свои обработчики.

После отработки метода делаю ttscommit своей транзакции, и перед возвратом создаю новую.
X++:
if(ttsInitialLevel >0 && appl.ttsLevel() == 0)
ttsbegin;
return something
Так можно обмануть систему.

Последний раз редактировалось sgt.Pepper; 26.04.2016 в 20:43.
За это сообщение автора поблагодарили: gl00mie (2).
Старый 27.04.2016, 13:26   #4  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Цитата:
Сообщение от sgt.Pepper Посмотреть сообщение
Если кому интересно, нашел решение проблемы (спасибо подсказке Alex_KD)...
Немного доработайте свой код, т.к. ttsLevel может быть и > 1
За это сообщение автора поблагодарили: gl00mie (2).
Старый 27.04.2016, 15:52   #5  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Ну я собственно с единицей нигде не сравниваю, проверяю только, что транзакция открыта (ttsInitialLevel > 0)
А в чем вы видите ошибку?
Старый 27.04.2016, 15:55   #6  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
ttsBegin у вас один, когда все транзакции возвращаетесь
Старый 27.04.2016, 16:44   #7  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Вы правы, надо будет что-то вроде такого написать
X++:
for (i==1; I<= ttsInitialLevel;i++)
    ttsbegin;
Только я ни разу не заметил начального уровня больше чем 1. Думаю он открывается в AIF только один раз, но на всякий случай проверю.
Теги
aif, ax2012, user connection

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов веб-сервиса Ax 2012 R3 из 1C 8.2 Bega DAX: Программирование 8 06.02.2015 13:30
Вызов Web-сервиса из Ax2009 samolalex DAX: Программирование 6 21.11.2012 14:50
daxdilip: How to: Configure Dynamics AX AIF Services to listen for SSL Requests (https) Blog bot DAX Blogs 0 23.01.2011 10:12
Dianne Siebold: AIF Top Ten Blog bot DAX Blogs 1 22.04.2008 11:19
Вызов веб-сервиса из аксапты dzeaman DAX: Программирование 18 24.12.2005 13:22

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:56.