Как в 8.3 определить и удалить спящие сеансы?

1. rafaiil 23.04.18 11:49 Сейчас в теме
Всем привет!
Платформа 8.3.7.2027 конфигурация на БСП,формы управляемые

Как определить и удалить спящие сеансы?
Если работать через Конфигуратор-Параметры информационной базы и тут выставить интервал засыпания и отключения сеанса.
результата не будет тк подключены клиентские обработчики по проверке наличия блокировки работы в базе и прочее.

Есть какое нибудь красивое решение?
ALmighty; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. o4karek 24.04.18 15:39 Сейчас в теме
(1) А зачем это из кода делать?
Если я правильно понимаю суть, то сеанс становится спящим, если клиент долгое время не пингует сервер (1с-ники приводят пример закрытой крышки ноутбука в веб-клиенте). А потом сама платформа, через установленный тайм-аут, отстреливает эти сеансы. По крайней мере так на партнерке писали
Причем начиная с какой-то версии (точно не помню) спящие сеансы перестали занимать лицензии. Да и не мешают они ничему (в первом приближении).
А еще вот цитата из партнерки:
Если время засыпания пассивных сеансов установить в 1200 секунд, а время жизни спящих сеансов установить в 1 секунду, то поведение сеанов сведется к поведению сенсов в предыдущих версиях платформы, когда понятие спящего сеанса отсутствовало.
2. login1020 133 23.04.18 12:20 Сейчас в теме
База серверная или файловая?
Для серверных тут с десяток обработок найдёте точно.
3. plebedinskiy 50 23.04.18 12:39 Сейчас в теме
а еще круче отправиться на GITHUB и там поискать исходники, совместить приятное с полезным.
4. rafaiil 23.04.18 12:46 Сейчас в теме
(3)серверная.

предлагаемые решения были на 8.2. может предложите конкретную ссылку если не сложно?
5. SlavaKron 24.04.18 15:23 Сейчас в теме
&НаКлиенте
Процедура УдалитьСпящиеСеансыЭтойБазы(Команда)
	УдалитьСпящиеСеансыЭтойБазыНаСервере();
КонецПроцедуры

&НаСервере
Процедура УдалитьСпящиеСеансыЭтойБазыНаСервере()
	СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
	Если Лев(СтрокаСоединения, 5) <> "Srvr=" Тогда
		Сообщить("Это не клиент-серверное соединение");
		Возврат
	КонецЕсли;
	
	ИмяСервера = Сред(СтрокаСоединения, 7);
	ИмяСервера = Лев(ИмяСервера, Найти(ИмяСервера, """") - 1);
	ПортСервера = 1540;
	ПортКластера = 1541;
	
	ПозицияДвоеточия = Найти(ИмяСервера, ":");	
	Если ПозицияДвоеточия > 0 Тогда		
		ПортКластера = Число(Сред(ИмяСервера, ПозицияДвоеточия + 1));
		ПортСервера = ПортКластера - 1;
		
		ИмяСервера = Лев(ИмяСервера, ПозицияДвоеточия - 1);
	КонецЕсли;
	
	СерверИПорт = ИмяСервера + ":" + Формат(ПортСервера, "ЧГ=");
	
	ИмяБазы = Сред(СтрокаСоединения, Найти(СтрокаСоединения, "Ref=") + 5);
	ИмяБазы = Лев(ИмяБазы, Найти(ИмяБазы, """") - 1);
	
	
	Соединитель = Новый COMОбъект("V83.COMConnector");
	СоединениеСАгентом = Соединитель.ConnectAgent(СерверИПорт);
	 
	// найдём наш кластер
	НашКластер = Неопределено;	
	Для Каждого Кластер Из СоединениеСАгентом.GetClusters() Цикл
		Если Кластер.MainPort = ПортКластера Тогда
			НашКластер = Кластер;
			Прервать
		КонецЕсли;
	КонецЦикла;
	
	Если НашКластер = Неопределено Тогда
		Сообщить("Кластер не найден");
		Возврат
	КонецЕсли;	
	
	// аутентификация в нашем кластере
	ИмяАдминистратораКластера = "";
	ПарольАдминистратораКластера = "";
	СоединениеСАгентом.Authenticate(НашКластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
	
	// найдём нашу базу
	НашаБаза = Неопределено;
	Базы = СоединениеСАгентом.GetInfoBases(НашКластер);
	Для Каждого База Из Базы Цикл		
		Если НРег(База.Name) = НРег(ИмяБазы) Тогда			
			НашаБаза = База;
			Прервать
		КонецЕсли;		
	КонецЦикла;
	
	Если НашаБаза = Неопределено Тогда
		Сообщить("База не найдена");
		Возврат
	КонецЕсли;
	
	СеансыНашейБазы = СоединениеСАгентом.GetInfoBaseSessions(НашКластер, НашаБаза);
	Для Каждого Сеанс Из СеансыНашейБазы Цикл
		Если Сеанс.Hibernate Тогда
			СоединениеСАгентом.TerminateSession(НашКластер, Сеанс);
			Сообщить(Сеанс.SessionID);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
7. rafaiil 26.04.18 13:12 Сейчас в теме
(5)
данные код поможет удалить сеансы если они признаны системой "спящими"
проблема в том что на типовых конфигурациях или на тех которые основаны на БСП.
подключены обработчики которые срабатывают с разными периодами.(мне известно пока о двух: проверка на наличие блокировки работы в базе и проверка на динамическое обновление)

эти обработчики не дают сеансу заснуть поэтому если пользователь отошёл от компа на 30 минут или на 10 дней.
в системе если сеанс не завис так и будет актиным...
8. o4karek 26.04.18 13:27 Сейчас в теме
(7) Даже если выключить эти обработчики (совсем), сеансы не станут спящими.
9. rafaiil 26.04.18 13:46 Сейчас в теме
(8)станут.я отключал обработчики и у меня сеансы выключались.
10. o4karek 26.04.18 15:18 Сейчас в теме
(9) Параметр "Время засыпания пассивного сеанса" сделайте больше ~600 - и перестанут. А при маленьких значениях сеанс так и будет дергаться туда сюда: спящий - трудящийся
11. rafaiil 26.04.18 16:06 Сейчас в теме
(10)да я тоже это заметил.
В итоге вывод какой?
задача не реализуема средствами 1с?:)
12. o4karek 26.04.18 16:34 Сейчас в теме
(11) Повторю (6) - неясно, зачем это нужно делать из кода. Кластер сам должен решать озвученные задачи (судя по РТФМу).
Либо есть что-то, что вам очевидно, а остальным нет. И это "тайное знание" мешает понять причину того, почему вам это надо.
Но общий вывод у вас правильный - задача средствами встроенного языка не реализуема, т.к. определение сонности сеанса лежит ниже уровня встроенного языка.
14. rafaiil 26.04.18 16:49 Сейчас в теме
(12)
тайного знания нет.:)
такова задача руководства. чтобы если человек не работает за 1с,сеанс через 15 минут прекращался.
17. o4karek 26.04.18 17:03 Сейчас в теме
(14) Если обработка ожидания не срубается регламентными задачами, то установка ожидания на 15 минут с принудительным выходом из Предприятия выглядит вполне съедобным способом. Причем работать это будет не только в клиент-сервере.
13. Shevon 1 26.04.18 16:38 Сейчас в теме
подключены обработчики которые срабатывают с разными периодами.(мне известно пока о двух: проверка на наличие блокировки работы в базе и проверка на динамическое обновление)


Эти обработчики срабатывают от обычного рядового юзера 1С?
15. rafaiil 26.04.18 16:49 Сейчас в теме
16. Shevon 1 26.04.18 16:53 Сейчас в теме
Как-то нелогично. Если запускать их, то запускать регламентным заданием от имени пользователя, запускающего сервер 1С. А если каждый юзер эти вещи запускать будет, то как-то на кошмар похоже.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот