Информационная база 1С:Предприятия 8.0 может храниться как в специальном файле, так и в базе данных Microsoft SQL Server. В последнем случае приложение 1С:Предприятия взаимодействует с SQL-сервером посредством специального приложения - сервера 1С:Предприятия. Этот документ описывает некоторые детали взаимодействия клиентского приложения с сервером 1С:Предприятия. См., также "Вопросы установки и настройки 1C:Предприятия 8.0 в варианте "клиент-сервер"".
Консоль сервера 1С:Предприятия
Сервер 1С:Предприятия является COM+ приложением, не имеющем собственного пользовательского интерфейса. Простейшие действия по управлению сервером 1С:Предприятия (запуск, остановка) могут быть выполнены штатными средствами Windows, такими, как утилита Component Services. Для управления специфическими функциями сервера 1С:Предприятия предназначена утилита администрирования информационных баз в варианте "клиент-сервер" (консоль сервера 1С:Предприятия), описанная в соответствующем разделе книги "1С:Предприятие 8.0 клиент-сервер".
Консоль сервера 1С:Предприятия является подключаемым модулем (snap-in) штатного средства администрирования Windows - Microsoft Management Console. Ее регистрация выполняется автоматически программой установки 1С:Предприятия. Регистрация может быть выполнена и вручную. Для этого необходимо выполнить следующую командную строку:
regsvr32 <Каталог загрузочных модулей 1С:Предприятия>/RAdmin.dll
Например:
regsvr32 "C:/Program Files/1CV8/bin/RAdmin.dll"
Для иллюстрации описанных ниже механизмов будет полезно воспользоваться консолью сервера 1С:Предприятия для просмотра списка соединений информационной базы.
Соединение с сервером 1С:Предприятия
С сервером 1С:Предприятия помимо консоли сервера 1С:Предприятия могут работать еще 3 вида приложений:
Каждый экземпляр приложения 1С:Предприятия и каждый экземпляр внешнего соединения с информационной базой является отдельным клиентом сервера 1С:Предприятия и образует отдельное соединение с сервером 1С:Предприятия. Соединение с сервером реализуется механизмами COM/DCOM и обеспечивает удаленный доступ клиента к объектам, экземпляры которых созданы на сервере.
В отличие от соединения с консолью сервера 1С:Предприятия, соединение с 1С:Предприятием или Внешним Соединением ассоциируется с определенной Информационной Базой (на одном сервере 1С:Предприятия их может быть несколько) идентификатор которой задается в процессе соединения. Поскольку различные информационные на одном сервере 1С:Предприятия функционируют практически независимо, далее будем говорить именно о соединениях с Информационной Базой.
При запуске 1С:Предприятия соединение создается после выбора клиент-серверной информационной базы и режима запуска (1С:Предприятие/Конфигуратор) в диалоге "Запуск 1С:Предприятия" и разрывается при завершении приложения. Пронаблюдать за этим процессом можно при помощи консоли сервера 1С:Предприятия, задав в свойствах сервера автоматический опрос через 1 - 3 секунды, а затем выбрав ветку "Соединения" интересующей Вас информационной базы. При старте 1С:Предприятия в списке соединений будет появляться соответствующая запись, а при завершении 1С:Предприятия соответствующая ему запись будет пропадать.
Модуль Внешнего Соединения соединяется с сервером в процессе исполнения метода connect и получения указателя на созданный этим методом объект "внешнее соединение". Соединение будет разорвано при уничтожении объекта "внешнее соединение". Это происходит либо при выполнении метода Release интерфейса IUnknown на языке C/C++, либо при потере указателя на этот объект (например: присваиванием ему NULL или Неопределено, уничтожении локальной среды процедуры или функции и т.п.), либо после освобождения объекта "внешнее соединение" сборщиком мусора (Java, .NET). Например:
// Соединений нет.
МодульВнешнихСоединений = Новый COMОбъект("V8.COMConnector");
// Соединений нет.
Соединение1 = МодульВнешнихСоединений.connect("Srvr=ServerName;Ref=InfoBaseName");
// Одно соединение.
Соединение2 = МодульВнешнихСоединений.connect("Srvr=ServerName;Ref=InfoBaseName");
// Два соединения.
Соединение1 = Неопределено;
// Одно соединение.
Соединение2 = Неопределено;
// Соединений нет.
Важно иметь в виду, что при установке первого соединения с информационной базой сервер 1С:Предприятия выполняет чтение наиболее важных и часто используемых данных из информационной базы, которые в дальнейшем могут совместно использоваться несколькими соединениями. Поэтому установка первого соединения может выполняться несколько дольше, чем второго и последующих. Кроме того, если соединение является первым для всего сервера 1С:Предприятия после долгого бездействия, то сервер может быть остановлен механизмом COM+, выгружен из памяти и потребуется загрузка всех его компонент, что тоже может занять некоторое время.
Разрыв последнего соединения с данной информационной базой приводит к выгрузке из памяти всех данных этой информационной базы, а разрыв последнего соединения с данным сервером 1С:Предприятия - выгрузке большинства входящих в его состав компонент. При этом, если используются установки COM+ по умолчанию, то через 3 минуты после разрыва последнего соединения с сервером 1С:Предприятия он будет остановлен и выгружен из памяти.
О "зависших" соединениях
Каждое соединение с информационной базой требует незначительных ресурсов, однако в следующих случаях лишние соединения могут мешать нормальной работе:
-
Соединение с Конфигуратором не позволяет подсоединиться к информационной базе другим Конфигуратором.
-
Обновление конфигурации базы данных и некоторые другие операции, требующие монопольного доступа к информационной базе, не могут быть выполнены, если соединений с данной информационной базой больше одного.
-
Если в процессе работы 1С:Предприятия была начата транзакция, то эта транзакция ассоциируется с соединением сервера 1С:Предприятия с данным клиентским приложением 1С:Предприятия. Нештатное завершение клиентского приложения 1С:Предприятия в этот момент может привести к тому, что транзакция останется незавершенной вместе с неразорванным соединением. Незавершенная транзакция может быть препятствием для нормальной работы других клиентских приложений 1С:Предприятия.
-
При начале редактирования объекта или при выполнении метода <объект>.Заблокировать() на объект устанавливается блокировка. Все блокировки объектов также ассоциируются с соединением и сохраняются либо до момента снятия блокировки (окончание редактирования или выполнение метода <объект>.Разблокировать()) или до разрыва соединения. Неснятые блокировки объектов также могут быть помехой для работы других клиентских приложений 1С:Предприятия.
В перечисленных случаях нежелательные соединения необходимо разорвать, для чего обычно достаточно завершить установившие их приложения. Если это затруднительно, то соединения можно разрывать при помощи Консоли сервера 1С:Предприятия. При этом установившие их приложения завершатся аварийно и все их несохраненные данные будут потеряны.
Отдельный случай представляют соединения, за которыми уже не стоят никакие приложения. Такие соединения могут остаться от приложений, завершившихся не штатно. Механизм COM+ следит за активностью приложения, установившего соединение с COM+ сервером, в большинстве случаев распознает соединения, оставшиеся без клиентских приложений и через 6-8 минут автоматически разрывает такие соединения. Если это соединение мешает продолжению работы то не дожидаясь автоматического разрыва соединения механизмами COM+ можно разорвать соединение при помощи консоли сервера 1С:Предприятия.
|