01.04.2011, 20:46 | #1 |
Боец
|
ClientType::Server
Вопрос без подвоха: когда сработает данное условие?
X++: if (new Session().clientKind() == ClientType::Server) info ("Server"); |
|
01.04.2011, 22:44 | #2 |
Moderator
|
Рискну предположить, что в 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 |
Боец
|
SysEventHandler - о! именно этот функционал я и пытаюсь запустить (ну или убедиться, что он работает). Запускается он из метода application.new(). Там, в цепочке вызовов, стоит условие clientKind() == ClientType::Server, которое не проходит. Вообще этот метод вызывается (точнее сказать, создается сессия того или иного типа) при:
Цитата:
AOS-сервер при старте устанавливает системное соединение с самим собой от имени псевдопользователя -AOS-
Цитата:
...надо код засунуть в один из статических методов класса BatchRun, которые точно выполняются в серверном контексте
|
|
02.04.2011, 12:29 | #4 |
Moderator
|
Гм. Может этот тип сессии вообще остался от версии 3.0? А в версии 2009, в связи с появлением типа нити worker-thread, его отключили ?
Я бы советовал попробовать при ОСТАНОВЛЕННОМ AOS включить режим трассировки (с маскимальным количеством флажков и глубиной трассировки 99(, потом запустить AOS, остановить трассировку, и посмотреть какие классы и методы дергались при старте. Но я об этом механизме знаю не больше тебя Я его выкопал не в секретных архивах MS, а просто копаясь в коде (так что могу быть не прав). |
|
|
За это сообщение автора поблагодарили: DSPIC (5). |
02.04.2011, 23:55 | #5 |
Боец
|
Эмм, запутался я совсем, и не заметил. В общем, действительно, сессия в контексте -AOS- стартует при старте АОСа и в этом случае, ClientType=Server. Более того, их там две стартуют, с id=1, id=2. Вроде как и функциональность SysEventHandler также работает.
Fed, ну да Бог с ним, с этим ClientType, будем считать, что с ним разобрались - но всё это - мои попытки решить более глобальную проблему (или как-то к ней подобраться). Вот, оно, главное зло: AX2009: Ошибка оптимистической модели обновления Ну а эту тему наверное можно считать закрытой, мерси за наводки! |
|
|
|