26.11.2009, 19:08 | #1 |
Участник
|
Форма активных пользователей (SysUsersOnline) и сессии COM-коннектора
После небольшого спора с коллегой, занимающимся 1С, на тему того, сколько сессий открывает COM-коннектор, работающий в качестве сервиса COM+, при одновременном доступе через него в Аксапту нескольких "внешних" приложений (в данном случае 1С), подумалось: а почему, собственно, в форме активных пользователей видна только одна сессия business connector'а? Ведь явно в описанном сценарии определенные операции выполняются параллельно, чего штатными средствами в рамках одной сессии достичь невозможно: AOS на каждую сессию создает один-единственный поток и обрабатывает запросы от клиента синхронно. И тут, просматривая сообщения в eventlog'е о том, как начинаются и завершаются соединения business connector'а, я обратил внимание, что у них очень специфический номер сессии: он начинается c 65534 и затем уменьшается по мере появления новых сессий, при этом освобождаемые при завершении сессий номера активно используются повторно (65535 - какая-то служебная сессия пользователя '-AOS-', которая явно пропускается в той же форме активных пользователей). В то же время, метод получения информации о сессиях, SysUsersOnline::getAllOnlineUserInfo(), обращается лишь к сессиям с номерами от 1 до info::licensedUsersTotal(), т.е. условно к первым сотням. Так вот, после небольшой модификации этого метода на форме активных пользователей появились дополнительные сессии, создаваемые business connector'ом с указанием - при наличии активных соединений с БД - их SPID/SID и проч. (показ Serial No, SID, INST_ID - это доработка). И теперь стало понятнее, почему при подключении COM-коннектора "свободные" сессии на AOS'е заканчиваются раньше, чем на той же форме активных пользователей начнет показываться предельное число активных сессий.
Не совсем пока понятно, что делать с сессиями, которые показываются с типом NotAOS - для них не создается экземпляр AOSSessionInfo, и вообще, если верить eventlog'у, они уже завершены, но объекты xSession для них создаются... Ниже приведена модификация SysUsersOnline::getAllOnlineUserInfo() для отображения таких сессий. X++: #define.MaxSessionId (65535) //+Отображать все COM-соединения в активных пользователях, gl00m, 26.11.2009 server static container getAllOnlineUserInfo() { int counter; int num; int maxSessions = Info::licensedUsersTotal(); int idleTicks; container users; container c; xSession session; UserInfo userInfo; AOSSessionInfo aosSession; AOSClientMode clientMode; // Отображать все COM-соединения в активных пользователях, gl00m, 26.11.2009 --> SetEnumerator setEnum; Set setOfSessionIds = new Set( typeof(counter) ); Counter cnAosUsers = info::licensedAosUsers(); // Отображать все COM-соединения в активных пользователях, gl00m, 26.11.2009 <-- ; if (!maxSessions) //Demo mode maxSessions = 3; num = 0; for(counter = 1; counter <= maxSessions;counter++) { // Отображать все COM-соединения в активных пользователях, gl00m, 26.11.2009 --> setOfSessionIds.add( counter ); } for (counter = #MaxSessionId - cnAosUsers; counter <= #MaxSessionId; counter++) { setOfSessionIds.add( counter ); } setEnum = setOfSessionIds.getEnumerator(); while (setEnum.moveNext()) { counter = setEnum.current(); // session = new xSession(counter, true); session = new xSession(counter, false); // NB! с параметром _checkSession == true ничего не выйдет // Отображать все COM-соединения в активных пользователях, gl00m, 26.11.2009 <-- Последний раз редактировалось gl00mie; 26.11.2009 в 19:14. |
|
|
За это сообщение автора поблагодарили: raz (5), Logger (10). |
26.11.2009, 23:53 | #2 |
Участник
|
Интересно, почему штатно они не отображаются?
В чем глубокий смысл скрывать такие сессии? Тем более что только для них возможно получить SPID соединения в базе. Для обычного пользователя COM - SPID соединения не виден, из-за чего неудобно разруливать блокировки и т.п. |
|
27.11.2009, 08:59 | #3 |
NavAx
|
2 Logger
SPID виден при использовании АОСов (тонкий клиент), причем видно только у пользователей текущего АОСа. Последний раз редактировалось raz; 27.11.2009 в 09:13. |
|
27.11.2009, 12:23 | #4 |
Участник
|
У меня надпись NotAOS говорит о том, что пользователь подключен к другому АОСу.
|
|
27.11.2009, 16:04 | #5 |
Участник
|
Про business connector - не знаю. Но некоторые выводы по ComConnector я описал здесь
Закрыть AxaptaCOMConnector из AXAPTA "Фишка" в том, что есть "процесс-диспетчер" и "рабочие" процессы. Соответственно, есть некоторые отличия в их работе. |
|
|
За это сообщение автора поблагодарили: Logger (10). |
28.11.2009, 11:37 | #6 |
Участник
|
Цитата:
Но я имел в виду что штатно для ком коннектора SPID не виден. Т.е. заходишь в форму активных пользователей - и видишь SPID у всех пользователей в трехзвенке, выполняющих запросы к БД. Для ком пользователя (имеется в виду "процесс-диспетчер" - а только он и виден в активных юзерах в штатной форме) SPID никогда не виден, независимо от его активности. А теперь благодаря тому что открыты сессии из диапазона номеров под 65535 - видны их SPID. Последний раз редактировалось Logger; 28.11.2009 в 11:47. |
|
28.11.2009, 11:45 | #7 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Про business connector - не знаю. Но некоторые выводы по ComConnector я описал здесь
Закрыть AxaptaCOMConnector из AXAPTA "Фишка" в том, что есть "процесс-диспетчер" и "рабочие" процессы. Соответственно, есть некоторые отличия в их работе. |
|