Встречайте:
Самовыбрасывалка из терминала для пользователей !
Это крохотный web-сервер, с несколькими динамически создаваемыми страничками, позволяющий пользователю самостоятельно закрыть свою подвисшуу сессию на сервере терминалов.
Для работы нужен .Net 4.5
Как это работает?
ингредиенты:
1. Домен
2. Сервер терминалов
3. Пользователи в домене
Администратор запускает это утилиту на сервере с админскими правами, разрешает использовать порт 80 или тот, который указан в коммандной строке (/p:[port])) в брандмауэре, раздает пользователям ссылки вида http://[Server]:port/ и наслаждается.
Утилита слушает входящие соединения и реагирует на них следующим образом:
узнает имя подключившегося пользователя через кусочек NTLM авторизации, выводит приветственную страничку с единственной кнопкой «Завершить сессию».
Когда пользователь нажимает на кнопку, определяется его номер сессии и выполняется Reset session. Все сообщения об ошибках перенаправляются на страничку.
Важное дополнение. Все что связано с фичами 1С, предназанчено для 7.7. Если кому — то нужна поддержка 8.x — пишите в комментарии.
Upd. 27.05.2014
— Переделан сетевой мехнизм.
— Переделан механизм сброса сессий, теперь это не консольная утилита reset session.
— Изенен интерфейс.
— Добавлена возможность сбросить настройки печати 1С.
— Добавлена возможность сбросить настройки окна/панелей 1С.
— Добавлен лог операций
— Добавлены счетчики производительности процессора на сервере.
— Добавлена страничка администратора. Позволяет выбросить любого залогиненого пользователя. Администратор определяется вхождением в группу администраторов на сервере (NTLM аторизация)
— У Администратора есть возможность разблокировать список пользователей выбранной базы (при помощи утилиты Handle от Sysinternals)
— У администратора теперь есть возможность сбросить все отключенные сессии (за исключением своей)
— У администратора есть возможность выполнять команды коммандной строки на локальном / удаленном сервере (при помощи CMD/WINRS ) — Не очевиднакя фича, если кому-то понадобится, приведу пример в комментариях.
Upd. 06.08.2014
— Добавлена возможность редактирования списка пользователей баз для администратора
— Пользователь теперь может самостоятельно изменить свой пароль в 1С, если имена учетных записей в 1С совпадают с доменными
— Добавлена возможно загрузки своего логотипа. Для этого нужно положить в каталог с сервером картинку top_logo.gif и перезапустить сервер.
— мелкие доработки и переделки интерфейса.
А не проще просто на сервере включить убиение сессий по таймауту?
Любой Windows Server такое умеет делать
Проще! Но почему-то не помогает.
(1) EmpireSer, а сколько устанавливать таймаут? сделаешь маленький — будут отключаться нормальные пользователи. Сделаешь большой — долго ждать.
Идея хорошая — надо как-нибудь проверить будет
Только почему катапульта? Скорее экстрактор.
(4) OneS, Потому что выпинывает 🙂
(2)
Странно, т.к. у наших многих клиентов именно так и настроено.
(3) mikmike,
Экспериментами получили время около часа, с условием временного падения интернета на 5-30 минут. И «нормальных» пользователей отключать не будет, т.к. Windows RDP посылает команды активности сессии.
P.S. Неудобство возникает при администрировании, так как нельзя запустить какой-то процесс и выйти. Из-за этого сессию нужно оставлять активной.
Я тоже у своих клиентов на сервере включаю таймаут, как правило 50-60 мин. Пока все работало нормально.
Таймаут не катит, так как многие ставят всякие обработки на вечер. Кроме того, если у пользователя проблема например с принтерами, ему нужно решить проблему прямо сейчас, а не через 60 минут. Мы сделали проще: научили пользователей нажимать ctrl+alt+end, и выбрать выход из системы.
(8) sorb, можно и скриптик с красивой иконкой в виде сапога на рабочем столе.
Пару раз сталкивался с «приколами выьрасывания из терминала». Например:
Расчетчица вечером запустила «расчет зарплаты» и пошла домой (расчет идет 4-5 часов). Документ расчитался, после этого прошёл час (таймаут терминала) и сессия была закрыта… Утром Расчётчица добавила ещё одно начисление (премию) и пересчитала зарплату.
Но почему, то «Расчет зарплаты» не пересчитал один налог. Т.е. он увидел новое начисление, всё пересчитал правильно, кроме одного налога — он остался «старым» (без учета премии). Перепроведение документов ничего не дало… Помогла только чистка кеша 1С для данного пользователя…
Бывает, что «убивание» сессии 1С оставляет кеш 1С, который может преподнести очень неприятные СЮРПРИЗЫ…
Поэтому, всётаки, «воспитывать пользователей», чтобы закрывали 1С и сессию…
(10) AnryMc,
Да, это реальная проблема. И её решение занимает много времени (судя по описанному Вами примеру, на её решение ушло не меньше одного дня, а скорей всего — для 2-3: перепровели после начисления премии, увидели что есть ошибки, перепровелии и пересчитали ещё раз, опять проанализировали, очистили кеш, пересчитали и перепровели, опять проанализаровали. Как минимум, 3 действия, которые занимают по 4-5 часов плюс ещё несколько по 1-2 часа.
«Воспитывать пользователей», как Вы пишете, это конечно хорошо. Но в данном конкретном случае это не решение проблемы. Здесь очень просится для решения некоторое фоновое задание: перед уходом домой расчётчик запускает фоновое задание расчёта, ЗАКРЫВАЕТ сессию (а вот тут без «воспитания пользователей» никак не обойтись), а на утро получает корректные данные.
(11) FractonKireyev,
Мне повезло — была «утренняя» локальная копия которая всё посчитала правильно… А так как с кешем я воюю уже давно (и у многих) — сразу почистил на сервере… Так что в пол дня справился (без учета пересчета на сервере)…
(12) AnryMc,
Всё-равно я ОЧЕНЬ советую подумать о переводе таких длительных расчётов в фоновые (регламентные) задания, которые инициирует конечный пользователь. Вплоть даже до того, что ПОЛНОСТЬЮ запретить расчётчику проводить расчёты в своей сессии. Сформировал задание, инициировал расчёт, и пусть ждет, пока всё завершится без его участия.
Плюсы такого подхода:
1. Сессия не занята проведением расчёта и пользователь может заниматься чем-то другим (например, тот-же расчётчик во время фонового расчёта может выписывать какие-то справки — его сессия-то СВОБОДНА).
2. Практически полностью исчезает необходимость чистить кеш (на практике — процентов на 80).
Всё это не зависит от того, в каком режиме работает БД — файловом (в чистом варианте, распределённом по компам или в терминальных сессиях) либо клиент-серверном.
Но вопрос «воспитания пользователя» остаётся актуальным — он должен знать и уметь инициировать задание (хотя, это можно от него и спрятать в одну кнопку); должен знать, как определить завершенность запущенного задания; должен знать в какой момент времени можно открывать и редактировать документ, в который будет записан результат расчёта, чтобы не блокировать от изменения этот документ в самый неподходящий момент (хотя и это можно решить на программном уровне — до тех пор, пока задание не завершится, документ можно открыть только для чтения и нельзя для чтения/записи).
(13) FractonKireyev,
База СКУЛевская + терминал…
У предлагаемого Вами подхода
имеет один существенный недостаток — изменение типовой конфигурации
А я бы с удовольствием прочитал бы, как это возможно сделать…
Все-равно конфа писана-переписана….
(14) AnryMc, неужели это нельзя решить добавлением новых объектов (пара общих модулей, пара подписок на события)?? о_О… и поддержка типовой останется работающей и проблема решается…
По ходу нарисовались несколько вопросов:
1) работает со стендалоун серверами терминалов или умеет работать с фермой? Например при режиме раунд-робин выбора сервера какой адрес давать юзверям?
2) работает только с РДП сеансами или ИСА тоже умеет обрабатывать?
3) работает с серверами в режиме сервера терминалов или сможет работать с серверами в режиме виртульных рабочих столов?
4) с какими серверами совместима? (2003/2008/2008Р2,2012)
в обчем штука ну очень нужная и полезная, но маловато информации для размышления.
(17) w-divin, По порядку
1) вообще делалось для отделного сервера, если кто подскажет как закрыть сессию при ферме вручную — возможно удастся адаптировать.
2) В чем принципиальное отличие РДП от ИСА, не разбираюсьт в матчасти 🙂 ? Если на сервере существует сессия пользователя с числовым идентфикатором, под которой запущены какие-то процессы, то закроет.
3) аналогично 2)
4) тестировалось на 2008R2, но думаю начиная с 2003 должно работать.
Фактически это автоматизация запуска Reset session от имени администратора.
Не проще написать бантник на терминальном сервере, где прибивать процесс 1c от текущего пользователя? И пользователю ярлык кинуть на рабочий стол, если автоматом не выкинуло, сам запустит? Принудительно вырубать подвисшие сессии после окончания рабочего дня по шедуллеру?
(19) warlomak, батник нужно запускать с правами администратора, а разрешать пользователю запускать что-то с правами админа чревато. Запустить из под учетки пользователя не получится потому что сессия не отвечает.
Убиение сессий по шедулеру вариант, но отработает только в конце дня. А если на сервере работают пользователи из разных регионов?
В локальной версии добавил в утилиту сброс настроек принтера для 1С — Убиенеие соотвествующей ветки реестра пользователя в ветке 1С, бывает не открывается диалог настроек принтера у пользователя из 1С.
Так же добавил аналогичный механизм сброса настроек окна 1С, бывает портятся настрокий загадочным образом и после этого вклеенное окно 1С не разворачивается.
Если кого-то интересует, могу обновить версию тут.
(21) Версия обновлена. Все перечисленные фичи добавлены.
(22) В текущей версии для внутреннего пользования добавлен интерфейс редактирования списков пользователей в базах. И возможность самостоятельной смены пароля пользователя в случае если учетки 1С = доменным учеткам. Если кого-нибудь заинтересует обновлю версию тут.
Обновленная версия загружена.