Терминальная катапульта

Если Вам надоело снимать зависшие сессии пользователей на терминальном сервере, то мы идем к Вам!
Встречайте:
Самовыбрасывалка из терминала для пользователей !

Это крохотный 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 и перезапустить сервер.

— мелкие доработки и переделки интерфейса.

 

 

 

24 Comments

  1. EmpireSer

    А не проще просто на сервере включить убиение сессий по таймауту?

    Любой Windows Server такое умеет делать

    Reply
  2. MadDAD

    Проще! Но почему-то не помогает.

    Reply
  3. mikmike

    (1) EmpireSer, а сколько устанавливать таймаут? сделаешь маленький — будут отключаться нормальные пользователи. Сделаешь большой — долго ждать.

    Идея хорошая — надо как-нибудь проверить будет

    Reply
  4. OneS

    Только почему катапульта? Скорее экстрактор.

    Reply
  5. MadDAD

    (4) OneS, Потому что выпинывает 🙂

    Reply
  6. EmpireSer

    (2)

    Странно, т.к. у наших многих клиентов именно так и настроено.

    (3) mikmike,

    Экспериментами получили время около часа, с условием временного падения интернета на 5-30 минут. И «нормальных» пользователей отключать не будет, т.к. Windows RDP посылает команды активности сессии.

    P.S. Неудобство возникает при администрировании, так как нельзя запустить какой-то процесс и выйти. Из-за этого сессию нужно оставлять активной.

    Reply
  7. DAnry

    Я тоже у своих клиентов на сервере включаю таймаут, как правило 50-60 мин. Пока все работало нормально.

    Reply
  8. sorb

    Таймаут не катит, так как многие ставят всякие обработки на вечер. Кроме того, если у пользователя проблема например с принтерами, ему нужно решить проблему прямо сейчас, а не через 60 минут. Мы сделали проще: научили пользователей нажимать ctrl+alt+end, и выбрать выход из системы.

    Reply
  9. OneS

    (8) sorb, можно и скриптик с красивой иконкой в виде сапога на рабочем столе.

    Reply
  10. AnryMc

    Пару раз сталкивался с «приколами выьрасывания из терминала». Например:

    Расчетчица вечером запустила «расчет зарплаты» и пошла домой (расчет идет 4-5 часов). Документ расчитался, после этого прошёл час (таймаут терминала) и сессия была закрыта… Утром Расчётчица добавила ещё одно начисление (премию) и пересчитала зарплату.

    Но почему, то «Расчет зарплаты» не пересчитал один налог. Т.е. он увидел новое начисление, всё пересчитал правильно, кроме одного налога — он остался «старым» (без учета премии). Перепроведение документов ничего не дало… Помогла только чистка кеша 1С для данного пользователя…

    Бывает, что «убивание» сессии 1С оставляет кеш 1С, который может преподнести очень неприятные СЮРПРИЗЫ…

    Поэтому, всётаки, «воспитывать пользователей», чтобы закрывали 1С и сессию…

    Reply
  11. FractonKireyev

    (10) AnryMc,

    Да, это реальная проблема. И её решение занимает много времени (судя по описанному Вами примеру, на её решение ушло не меньше одного дня, а скорей всего — для 2-3: перепровели после начисления премии, увидели что есть ошибки, перепровелии и пересчитали ещё раз, опять проанализировали, очистили кеш, пересчитали и перепровели, опять проанализаровали. Как минимум, 3 действия, которые занимают по 4-5 часов плюс ещё несколько по 1-2 часа.

    «Воспитывать пользователей», как Вы пишете, это конечно хорошо. Но в данном конкретном случае это не решение проблемы. Здесь очень просится для решения некоторое фоновое задание: перед уходом домой расчётчик запускает фоновое задание расчёта, ЗАКРЫВАЕТ сессию (а вот тут без «воспитания пользователей» никак не обойтись), а на утро получает корректные данные.

    Reply
  12. AnryMc

    (11) FractonKireyev,

    Мне повезло — была «утренняя» локальная копия которая всё посчитала правильно… А так как с кешем я воюю уже давно (и у многих) — сразу почистил на сервере… Так что в пол дня справился (без учета пересчета на сервере)…

    Reply
  13. FractonKireyev

    (12) AnryMc,

    Всё-равно я ОЧЕНЬ советую подумать о переводе таких длительных расчётов в фоновые (регламентные) задания, которые инициирует конечный пользователь. Вплоть даже до того, что ПОЛНОСТЬЮ запретить расчётчику проводить расчёты в своей сессии. Сформировал задание, инициировал расчёт, и пусть ждет, пока всё завершится без его участия.

    Плюсы такого подхода:

    1. Сессия не занята проведением расчёта и пользователь может заниматься чем-то другим (например, тот-же расчётчик во время фонового расчёта может выписывать какие-то справки — его сессия-то СВОБОДНА).

    2. Практически полностью исчезает необходимость чистить кеш (на практике — процентов на 80).

    Всё это не зависит от того, в каком режиме работает БД — файловом (в чистом варианте, распределённом по компам или в терминальных сессиях) либо клиент-серверном.

    Но вопрос «воспитания пользователя» остаётся актуальным — он должен знать и уметь инициировать задание (хотя, это можно от него и спрятать в одну кнопку); должен знать, как определить завершенность запущенного задания; должен знать в какой момент времени можно открывать и редактировать документ, в который будет записан результат расчёта, чтобы не блокировать от изменения этот документ в самый неподходящий момент (хотя и это можно решить на программном уровне — до тех пор, пока задание не завершится, документ можно открыть только для чтения и нельзя для чтения/записи).

    Reply
  14. AnryMc

    (13) FractonKireyev,

    База СКУЛевская + терминал…

    У предлагаемого Вами подхода

    о переводе таких длительных расчётов в фоновые (регламентные) задания, …

    имеет один существенный недостаток — изменение типовой конфигурации

    Reply
  15. dock
    Всё-равно я ОЧЕНЬ советую подумать о переводе таких длительных расчётов в фоновые (регламентные) задания, которые инициирует конечный пользователь.

    А я бы с удовольствием прочитал бы, как это возможно сделать…

    Все-равно конфа писана-переписана….

    Reply
  16. w-divin

    (14) AnryMc, неужели это нельзя решить добавлением новых объектов (пара общих модулей, пара подписок на события)?? о_О… и поддержка типовой останется работающей и проблема решается…

    Reply
  17. w-divin

    По ходу нарисовались несколько вопросов:

    1) работает со стендалоун серверами терминалов или умеет работать с фермой? Например при режиме раунд-робин выбора сервера какой адрес давать юзверям?

    2) работает только с РДП сеансами или ИСА тоже умеет обрабатывать?

    3) работает с серверами в режиме сервера терминалов или сможет работать с серверами в режиме виртульных рабочих столов?

    4) с какими серверами совместима? (2003/2008/2008Р2,2012)

    в обчем штука ну очень нужная и полезная, но маловато информации для размышления.

    Reply
  18. MadDAD

    (17) w-divin, По порядку

    1) вообще делалось для отделного сервера, если кто подскажет как закрыть сессию при ферме вручную — возможно удастся адаптировать.

    2) В чем принципиальное отличие РДП от ИСА, не разбираюсьт в матчасти 🙂 ? Если на сервере существует сессия пользователя с числовым идентфикатором, под которой запущены какие-то процессы, то закроет.

    3) аналогично 2)

    4) тестировалось на 2008R2, но думаю начиная с 2003 должно работать.

    Фактически это автоматизация запуска Reset session от имени администратора.

    Reply
  19. warlomak

    Не проще написать бантник на терминальном сервере, где прибивать процесс 1c от текущего пользователя? И пользователю ярлык кинуть на рабочий стол, если автоматом не выкинуло, сам запустит? Принудительно вырубать подвисшие сессии после окончания рабочего дня по шедуллеру?

    Reply
  20. MadDAD

    (19) warlomak, батник нужно запускать с правами администратора, а разрешать пользователю запускать что-то с правами админа чревато. Запустить из под учетки пользователя не получится потому что сессия не отвечает.

    Убиение сессий по шедулеру вариант, но отработает только в конце дня. А если на сервере работают пользователи из разных регионов?

    Reply
  21. MadDAD

    В локальной версии добавил в утилиту сброс настроек принтера для 1С — Убиенеие соотвествующей ветки реестра пользователя в ветке 1С, бывает не открывается диалог настроек принтера у пользователя из 1С.

    Так же добавил аналогичный механизм сброса настроек окна 1С, бывает портятся настрокий загадочным образом и после этого вклеенное окно 1С не разворачивается.

    Если кого-то интересует, могу обновить версию тут.

    Reply
  22. MadDAD

    (21) Версия обновлена. Все перечисленные фичи добавлены.

    Reply
  23. MadDAD

    (22) В текущей версии для внутреннего пользования добавлен интерфейс редактирования списков пользователей в базах. И возможность самостоятельной смены пароля пользователя в случае если учетки 1С = доменным учеткам. Если кого-нибудь заинтересует обновлю версию тут.

    Reply
  24. MadDAD

    Обновленная версия загружена.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *