Зачем и почему :
Ни для кого не секрет, что время от времени некоторые сеансы могут зависать на сервере, и блокируя какие-нибудь объекты в базе препятствовать работе пользователей. Причины этого могут быть совершенно разные, например проблемы с сетью, перебои с питанием, зависание компьютера.
Когда база маленькая и пользователей мало, то можно просто зайти в консоль сервера 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
Просто натолкнулся уже на это и корректно отрабатывает если при такой ситуации убивать именно второй сеанс.