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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2008, 12:37   #1  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Подскажите пожалуйста, возможно ли сделать так чтобы определенный пользователь мог открывать navision даже тогда,
когда все сессии подключения заняты?
Насколько я понимаю надо написать код в первом codeunit'е который будет отключать последнюю сессию, если она занята.
Старый 17.10.2008, 13:18   #2  
Cheb is offline
Cheb
Участник
Лучший по профессии 2017
 
138 / 13 (1) ++
Регистрация: 22.09.2002
Адрес: Ростов-на-Дону -> Москва
Так не получится, т.к. чтобы запустился 1-й кодеюнит, должна уже быть свободная сессия. Мне кажется, нужно попробовать использовать хранимую процедуру [$ndo$dbproperty], о которой написано в Application Designer's Guide.
Старый 17.10.2008, 13:48   #3  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от lobster Посмотреть сообщение
Подскажите пожалуйста, возможно ли сделать так чтобы определенный пользователь мог открывать navision даже тогда,
когда все сессии подключения заняты?
Насколько я понимаю надо написать код в первом codeunit'е который будет отключать последнюю сессию, если она занята.
Боюсь отключать не получится, если только у Вас не SQL Server и у ВИП'а права сисадмина - в этом случае можно
выполнить kill @НомерСессии через ADO Connection ( trusted connection, вариант с аутенфикацией БД даже не рассматриваю с силу уязвимости).
Возможно проще в первом кодеюните проверять лимит сессий и давай коннектиться последней сессии только если юзер VIP,
либо если VIP уже работает с базой.
Старый 17.10.2008, 14:12   #4  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от rmv Посмотреть сообщение
если только у Вас не SQL Server и у ВИП'а права сисадмина - в этом случае можно
выполнить kill @НомерСессии через ADO Connection
Да у нас SQL server, и у ВИП'а права сисадмина.
Есть аутентификация БД и виндовая, с правами сисадмина.
Насчет kill @НомерСессии все понятно, а вот с ADO Connection не совсем понятно.
Как я понял при подключении к БД ВИП'а в SQL будет убиваться одна сессия, например с помощью хранимой процедуры.
Только каким образом будет выполняться хранимая процедура, именно когда подключается ВИП пользователь?
Старый 17.10.2008, 14:26   #5  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от lobster Посмотреть сообщение
Да у нас SQL server, и у ВИП'а права сисадмина.
Есть аутентификация БД и виндовая, с правами сисадмина.
Насчет kill @НомерСессии все понятно, а вот с ADO Connection не совсем понятно.
Как я понял при подключении к БД ВИП'а в SQL будет убиваться одна сессия, например с помощью хранимой процедуры.
На каждой экземпляр SQL у админа есть специальная выделенная сессия (тут называемая ВИП).
С помощью неё админ может зайти даже в "подвисшую" или "перегруженную" БД и с помощью kill @НомерСессии убить какую-нибудь сессию.
Цитата:
Только каким образом будет выполняться хранимая процедура, именно когда подключается ВИП пользователь?
Поэтому тут админ выполняет ручную работу, а не работает хранимая процедура (конечно же он может её вызывать).
Старый 17.10.2008, 14:50   #6  
andrevk is offline
andrevk
Участник
 
145 / 10 (1) +
Регистрация: 23.11.2006
Можно использовать Stored Procedure [sp_$ndo$loginproc]
она запускается при логине к базе.
В ней делать все проверки и вызывать закрытие сессии
Старый 17.10.2008, 14:51   #7  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от RedFox Посмотреть сообщение
Поэтому тут админ выполняет ручную работу
на данный момент я так и делаю, если все сесcии заняты, то убиваю сессию "в ручную" и подключаюсь к navision.
Но мне надо сделать так, чтобы например ген. директор. фирмы мог подключиться в любой момент когда ему надо и при этом не звонить мне
чтобы я убивал сессию вручную.
Старый 17.10.2008, 15:33   #8  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от lobster Посмотреть сообщение
на данный момент я так и делаю, если все сесcии заняты, то убиваю сессию "в ручную" и подключаюсь к navision.
Но мне надо сделать так, чтобы например ген. директор. фирмы мог подключиться в любой момент когда ему надо и при этом не звонить мне
чтобы я убивал сессию вручную.
Где-то на форуме обсуждалось уже. Или в коммерческих предложениях. Там предпологалось ранжировать пользователей. Т.е. для обычных людей досутпно скажем 50 сессий, для привелигерованых на 10 больше, а для самых крутых еще 2. В итоге обычный человек не может подключиться 51-м. Естественно это все проверяется в 1-м кодеюните при подключении. И так вырубать никого не надо.
Старый 17.10.2008, 15:40   #9  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от Andreblack Посмотреть сообщение
Можно использовать Stored Procedure [sp_$ndo$loginproc]
она запускается при логине к базе.
В ней делать все проверки и вызывать закрытие сессии
Интересная мысль, только Stored Procedure [sp_$ndo$loginproc] я НЕ НАШЁЛ.
Где она хранится?
У нас SQL server 2005.
Может одна из этих: dbo.$ndo$getdbts; sys.$xp_logininfo
Старый 17.10.2008, 15:47   #10  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от Fordewind Посмотреть сообщение
Где-то на форуме обсуждалось уже. Или в коммерческих предложениях. Там предпологалось ранжировать пользователей. Т.е. для обычных людей досутпно скажем 50 сессий, для привелигерованых на 10 больше, а для самых крутых еще 2. В итоге обычный человек не может подключиться 51-м. Естественно это все проверяется в 1-м кодеюните при подключении. И так вырубать никого не надо.
Это интересно. А у Вас есть ссылка?
Или примерно какой код ранжирует пользователей, в каком триггере 1-го codeunit'а?
Подскажите пожалуйста.
Старый 17.10.2008, 16:19   #11  
ledger is offline
ledger
Участник
 
5 / 10 (1) +
Регистрация: 23.09.2007
в коммерческих предложениях: Управление пользовательскими сессиями
Включено:
- группировка пользователей, назначение кол-ва возможных подключений на группу
- приоритезация внутри групп
- "включение" ограничений только при "большой" загрузке
- ограничение запуска нескольких сессий
- работает на любой версии начиная с 3.60 (как Native, так и SQL)
Старый 17.10.2008, 16:47   #12  
andrevk is offline
andrevk
Участник
 
145 / 10 (1) +
Регистрация: 23.11.2006
Цитата:
Сообщение от lobster Посмотреть сообщение
Интересная мысль, только Stored Procedure [sp_$ndo$loginproc] я НЕ НАШЁЛ.
Где она хранится?
У нас SQL server 2005.
Может одна из этих: dbo.$ndo$getdbts; sys.$xp_logininfo
Ее можно создать.
У меня до этого эта процедура выводила сообщение.
Код:
use ИмяБазы
go
CREATE PROCEDURE [sp_$ndo$loginproc]
@appname VARCHAR(64) = NULL,
@appversion VARCHAR(16) = NULL
AS
BEGIN
  IF SUSER_SNAME() IN ('Домен\Генеральный', 'Домен\ГлавныйБухгалтер') 
	BEGIN
	 if КоличествоОткрытыхСессий=30 begin
		ПроцедураУдаленияПервойСессии
	 end
  end
end
GO
GRANT EXECUTE ON [sp_$ndo$loginproc] TO public
GO
Старый 17.10.2008, 17:28   #13  
ledger is offline
ledger
Участник
 
5 / 10 (1) +
Регистрация: 23.09.2007
Post
Да, забыл совсем - по предыдущему моему посту:
- "выброс" из навижн при достижении определенного времени простоя (например - ушел на обед/курить, а коллегам не отдал подключение)
- "выброс" из навижн наименее приоритетного пользователя в условиях включенного квотирования и нехватки лицензий на группу (например - для отдела продаж задан лимит 5 подключений, всего работает 6 человек - 5 менеджеров с приоритетом 2, начальник с приоритетом 3. При дефиците лицензий при входе начальника будет выброшен менеджер с максимальным периодом простоя). Включение квотирование осуществляется при близком к максимальному количеству подключений (настраиваемый параметр)
 


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

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

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