Разработчики 1С часто сталкиваются с ситуацией, когда при попытке обновить конфигурацию базы данных (нажатие F7 или «бочонка») система выдает окно с сообщением об активных сессиях, но вместо привычной возможности завершить их и продолжить работу, предлагает только две кнопки: «Завершить работу» и «Перезапустить». Это особенно актуально при отладке HTTP-сервисов, веб-клиентов или работе на платформе версии 8.3.15 и выше. В этой статье мы подробно разберем, почему конфигуратор теряет способность управлять сеансами и как вернуть нормальный режим работы без постоянных перезапусков.
Проанализируем ситуацию с технической точки зрения. В штатном режиме конфигуратор взаимодействует с кластером серверов 1С и может посылать команды на принудительное завершение соединений. Однако в некоторых случаях эта связь нарушается. Рассмотрим основные факторы:
Разберем, как уменьшить время удержания сессий, которые создаются при обращениях к HTTP-сервисам. Это позволит сеансам «отваливаться» быстрее, не блокируя конфигуратор. Для этого нам необходимо отредактировать файл публикации default.vrd.
Найдем в файле default.vrd (обычно он находится в каталоге публикации на IIS или Apache) параметры управления сессиями. Нам интересен атрибут sessionMaxAge. Посмотрим на пример настройки:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyBase"
ib="Srvr="ServerName";Ref="BaseName";">
<httpServices publishByDefault="true">
<sessionMaxAge>20</sessionMaxAge>
<sessionReuse>DontUse</sessionReuse>
</httpServices>
</point>
В данном примере мы устанавливаем sessionMaxAge в значение 20 секунд. Это означает, что после завершения запроса сессия будет храниться в пуле не более 20 секунд, после чего сервер 1С сможет её корректно завершить. Параметр sessionReuse со значением DontUse запрещает повторное использование сессий, что полезно именно в процессе активной разработки и отладки, чтобы каждое обращение создавало «чистый» контекст.
Иногда проблема кроется в «зависших» данных о сеансах в самом кластере. Рассмотрим, как произвести глубокую очистку сеансовых данных. Это помогает, когда конфигуратор упорно не видит возможности завершить сеансы пользователей.
На сервере 1С необходимо выполнить следующие действия:
C:\Program Files\1cv8\srvinfo).snccntxt. Именно здесь хранятся данные о сеансах и их контекстах.После этой процедуры конфигуратор должен восстановить корректное взаимодействие с менеджером сеансов кластера.
Чтобы не заходить каждый раз в консоль администрирования и не выполнять рутинные действия, мы можем использовать скрипт на языке VBScript или PowerShell, который будет принудительно завершать все сеансы в базе перед нажатием F7. Рассмотрим пример скрипта, использующего V83.ComConnector:
Dim Connector, Agent, Cluster, Process, Base, Sessions, Session
Set Connector = CreateObject("V83.ComConnector")
Set Agent = Connector.ConnectAgent("ServerName")
Clusters = Agent.GetClusters()
For Each Cluster In Clusters
Agent.Authenticate Cluster, "", ""
Processes = Agent.GetWorkingProcesses(Cluster)
For Each Process In Processes
' Здесь можно добавить логику поиска нужной базы
' Завершаем сеансы для конкретной информационной базы
Sessions = Agent.GetSessions(Cluster)
For Each Session In Sessions
If Session.InfoBase.Name = "MyBaseName" Then
Agent.TerminateSession Cluster, Session
End If
Next
Next
Next
Создайте такой файл с расширением .vbs и запускайте его перед обновлением конфигурации. Это гарантированно очистит список активных соединений, и конфигуратор не будет выдавать окно о необходимости перезапуска.
Проанализируем настройки отладки в самом конфигураторе. В некоторых случаях использование старого протокола TCP при работе с веб-сервисами приводит к «залипанию» сессий в состоянии ожидания ответа от отладчика. Попробуем изменить протокол на HTTP.
Для этого перейдем в меню: Сервис — Параметры — Отладка. Выберем вариант «Использовать протокол HTTP». Также убедимся, что установлен флаг «Начинать отладку при запуске». Это позволяет платформе более гибко управлять сессиями отладки и корректно освобождать их при остановке процесса, что снижает вероятность блокировки обновления.
Часто причиной невозможности завершить сеансы являются фоновые задания, которые стартуют автоматически сразу после того, как вы попытались «выгнать» пользователей. Посмотрим, как временно заблокировать их выполнение.
В консоли администрирования кластера серверов 1С откройте свойства вашей информационной базы и установите флаг «Блокировка регламентных заданий включена». Это предотвратит запуск новых фоновых процессов в тот момент, когда конфигуратор пытается получить монопольный доступ. После успешного обновления конфигурации не забудьте снять этот флаг.
Мы рассмотрели комплекс мер по борьбе с «неубиваемыми» сессиями и странным поведением конфигуратора. Основной вывод: появление кнопок «Перезапустить» вместо завершения сеансов — это следствие потери актуальной связи между конфигуратором и менеджером кластера. Использование настроек default.vrd, скриптов автоматизации и правильного протокола отладки позволяет минимизировать простои и сделать процесс разработки HTTP-сервисов значительно комфортнее.