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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2011, 20:46   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
ClientType::Server
Вопрос без подвоха: когда сработает данное условие?

X++:
    if (new Session().clientKind() == ClientType::Server)
        info ("Server");
Старый 01.04.2011, 22:44   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Рискну предположить, что в 2009ой оно сработает в том случае, если класс выполняется на невыделенном батч-сервере (в смысле - совмещенном с AOS).
Также во всех версиях аксапты, по крайней мере начиная с версии 3.0, AOS-сервер при старте устанавливает системное соединение с самим собой от имени псевдопользователя -AOS-, в контексте этого соединения выполняется часть X++ кода из AOD (Какая не знаю, но очень маленькая). По крайней мере, почти точно происходит обработка внутрисистемных опопещений в классе SysEventHandler. Если ты свой код засунешь в этот класс, скорее всего условие сработает.
P.S. Возможно я насчет батч-сервера не совсем прав и для того чтобы там условие выполнилось,надо код засунуть в один из статических методов класса BatchRun, которые точно выполняются в серверном контексте. Возможно, обычный наследник RunBaseBatch для этого не подойдет - надо проверять...

Последний раз редактировалось fed; 01.04.2011 в 22:58.
Старый 01.04.2011, 23:40   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
SysEventHandler - о! именно этот функционал я и пытаюсь запустить (ну или убедиться, что он работает). Запускается он из метода application.new(). Там, в цепочке вызовов, стоит условие clientKind() == ClientType::Server, которое не проходит. Вообще этот метод вызывается (точнее сказать, создается сессия того или иного типа) при:
  1. Старте клиента, при этом ClientType=Client (проверено, не зависит от места выполнения кода - сервер\клиент)
  2. Старте пакетного обработчика, при этом ClientType=WorkerThread (проверено)
  3. Старте коннектора, при этом ClientType=COMObject (не проверял)
  4. Когда ещё? При старте АОСа он не вызывается.

Цитата:
AOS-сервер при старте устанавливает системное соединение с самим собой от имени псевдопользователя -AOS-
О, наверное в этот момент как раз и происходит вызов application.new() от имени ClientType::Server, что покрывает последний 4-й пункт списка выше, но только вроде как не при старте АОСа. А можно подробнее про это соединение - когда оно всё-таки происходит?

Цитата:
...надо код засунуть в один из статических методов класса BatchRun, которые точно выполняются в серверном контексте
неа, там ClientType=WorkerThread
Старый 02.04.2011, 12:29   #4  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Гм. Может этот тип сессии вообще остался от версии 3.0? А в версии 2009, в связи с появлением типа нити worker-thread, его отключили ?
Я бы советовал попробовать при ОСТАНОВЛЕННОМ AOS включить режим трассировки (с маскимальным количеством флажков и глубиной трассировки 99(, потом запустить AOS, остановить трассировку, и посмотреть какие классы и методы дергались при старте.

Но я об этом механизме знаю не больше тебя Я его выкопал не в секретных архивах MS, а просто копаясь в коде (так что могу быть не прав).
За это сообщение автора поблагодарили: DSPIC (5).
Старый 02.04.2011, 23:55   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Эмм, запутался я совсем, и не заметил. В общем, действительно, сессия в контексте -AOS- стартует при старте АОСа и в этом случае, ClientType=Server. Более того, их там две стартуют, с id=1, id=2. Вроде как и функциональность SysEventHandler также работает.

Fed, ну да Бог с ним, с этим ClientType, будем считать, что с ним разобрались - но всё это - мои попытки решить более глобальную проблему (или как-то к ней подобраться).
Вот, оно, главное зло: AX2009: Ошибка оптимистической модели обновления
Ну а эту тему наверное можно считать закрытой, мерси за наводки!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
Connection к другому SQL Server Poleax DAX: Программирование 5 19.10.2010 10:49
chrisfie: Project Server 2007 TechNet Webcasts recordings and decks Blog bot DAX Blogs 0 21.07.2009 10:05
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
aEremenko: Диагностика проблем при установке Microsoft Dynamics Ax 4.0 на Microsoft SQL Server 2005 Blog bot DAX Blogs 0 28.10.2006 16:01

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

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

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