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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.05.2016, 04:13   #1  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Про сервисы и транзакции вопрос
Допустим, у меня есть Custom Service (в AX2012 R3, если это важно)
Он выполняет обновление БД в транзакции, а вызывается внешним приложением по сети (используется net tcp binding).
Внимание вопрос: что будет, если связь по сети прервется в момент между вызовом сервиса но до получения ответа? обновление БД будет отменено или нет?

Дело в том, что я словил один баг, и никак не могу его воспроизвести: внешнее приложение получило exception что-то типа time-out, но в AX транзакция осталась закоммиченой.
Старый 05.05.2016, 09:55   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,893 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
В целом - так оно и есть. Если ты хочешь целостность данных в распределенной системе поддерживать, то надо two phase commit реализовывать. Теоретически 2PC поддерживается в WCF (пример)
Но что-то я сильно сомневаюсь что тебе вся эта информация поможет, чтобы 2PC работал, открытием/закрытием/рециклингом соединений и транзакций должен WCF-host заниматься, а не AOS; Я как-то очень сомневаюсь что Аксапта сможет в таком режиме с базой данных работать...

Последний раз редактировалось fed; 05.05.2016 в 10:55.
За это сообщение автора поблагодарили: Logger (3), lvan (2).
Старый 05.05.2016, 12:51   #3  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
AX выполнит всю логику независимо от таймаута.
Это не баг, WCF тоже таймаут вернет, но функция продолжит выполнятся.
Все вызовы Custom Service в транзакции выполняются по умолчанию и отменяются только если внутри вызова чтото не срослось.

Имейте ввиду, что классы типа Box и Debug::assert ведут себя недружелюбно.

Еще, насколько я помню, AIF вернет ошибку только если в коде произошел throw error. Если же в коде просто error(), AIF посчитает что все хорошо.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 05.05.2016, 17:11   #4  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Короче я понял, AX2012 не поддерживает TransactionScope в WCF вообще.
Значит надо самому как-то это делать? кто-нибудь уже делал, и как?
Теги
service, two phase commit, wcf

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по модулю Расчеты с персоналом. Выплата заработной платы. Keks DAX: Функционал 7 28.12.2009 10:31
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос: учет затрат по закупкам в модуле Проекты Keks DAX: Функционал 5 13.07.2006 10:15
Вопрос по проектам Фиксированная цена PSA DAX: Функционал 9 29.06.2006 14:23
Еще вопрос про покрытие по аналитикам в Сводном планировании rt2 DAX: Функционал 3 24.03.2006 18:56

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:34.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.