Зачем и почему :
Ни для кого не секрет, что время от времени некоторые сеансы могут зависать на сервере, и блокируя какие-нибудь объекты в базе препятствовать работе пользователей. Причины этого могут быть совершенно разные, например проблемы с сетью, перебои с питанием, зависание компьютера.
Когда база маленькая и пользователей мало, то можно просто зайти в консоль сервера 1с сбросить сеанс кому нужно. Рано или поздно у программистов появляется желание это как-нибудь упростить/автоматизировать с помощью 1С через V83.COMConnector и это я считаю логично.
Но что делать таким «счастливчикам» у которых доступа к серверу нету и V83.COMConnector на сервере не поднимается, только просить админов его зарегистрировать. А админы не настраивают (не хотят/не могут/нету времени). А если еще в кластере несколько серверов то на каждом надо COM-компоненту настроить, и при обновлении релиза у нас во всяком случае обязательно слетает.
Все эти неудобства и натолкнули меня на мысль что было бы неплохо иметь веб-сервис который будет крутится на машинке которую администрирую непосредственно я. То есть поднимать V83.COMConnector по запросу пользователя и сбрасывать нужный сеанс.
Реализация :
Пишем простенькую страничку с одним полем для ввода данных и одной кнопкой. По нажатии кнопки данные о номере сеанса передаются на сервер, где с помощью пакета edge выполняется процедура на C# которая на входе принимает номер сеанса , поднимает объект V83.COMConnector , и пытается убить нужный сеанс. Далее отображаем результат в консоль сервера и возвращаем ответ пользователю.
Для тех кому интересно попробовать — инструкция по установке :
- Устанавливаем Node.js , у себя использую версию 5.6.0 (https://nodejs.org/download/release/v5.6.0/)
- Распаковываем скачанный архив в удобное нам место.
- Запускаем консоль (cmd.exe) и заходим в папку проекта (sesions) пишем
npm install
и пакетный менеджер ноды выкачает нам в эту же папку все необходимые зависимости.
- Далее нам необходимо прописать данные для подключения к базе – открываем файл с именем com_api.js и заполняем значения переменным:
string server_name="ИмяСервера "; string cl_admin_name="ЛогинАдминаКластераСерверов"; string cl_admin_pass="ПарольАдминаКластераСерверов"; string base_name="ИмяНашейБазы";
5. Запускаем выполнив в консоли из той же папки команду
node server.js
*** Если при установке зависимостей edge не устанавливается – то сначала ставим еще «Microsoft .NET Framework 4.5» (https://www.microsoft.com/ru-RU/download/details.aspx?id=30653) и после установки выполняем пункт 3
*** Еще небольшой нюанс здесь код из расчета на то что в кластере 1 сервер и сеансы в консоли не задваиваются. Если в кластере к примеру 2 сервера и в консоли вы видите задвоенные сеансы – то в строке 30 файла com_api.js нужно в условии прописать
flag_first == 2
Просто натолкнулся уже на это и корректно отрабатывает если при такой ситуации убивать именно второй сеанс.
Задумка хорошая. Для данной задачи в качестве веб-сервера можно использовать вместо express, что-нибудь попроще, например node-static.
Чтобы не утруждать пользователя установками можно использовать портативную версию node.js Таким образом у меня реализован монитор журнала регистрации.
Чтобы сбросить сессию — нужно ввести ее номер, может сделать табличку, где будут выводится номера всех сессий и от туда можно было выбрать и сбросить.
edge.js для внедрения C# — эх как я искал такую штуку раньше, видимо недавно появилась…