Подключение к информационной базе 1С через механизм COM-соединения — частая задача при интеграции различных информационных систем. Однако при работе в клиент-серверном варианте разработчики нередко сталкиваются с ситуацией, когда объект V83.COMConnector не создается, а в консоли кластера серверов сеанс подключения отсутствует. Разберем по шагам, почему возникает эта проблема и как правильно настроить окружение для стабильной работы.
Проанализируем типовые ошибки, которые приводят к невозможности установить соединение:
&НаСервере, вызов происходит внутри 64-разрядного рабочего процесса сервера 1С (rphost.exe). При регистрации 32-разрядной библиотеки из папки Program Files (x86) запись попадает в ветку системного реестра для 32-битных приложений (WOW6432Node). Серверный процесс x64 не может напрямую загрузить 32-битную библиотеку comcntr.dll.Попытка ... Исключение Возврат; КонецПопытки; полностью глушит диагностическое сообщение операционной системы и платформы, не позволяя понять истинную причину сбоя (например, отсутствие прав, неверный пароль или отсутствие регистрации компоненты).Первым делом выясним причину, по которой подключение не устанавливается. Для этого необходимо выводить системное описание ошибки при перехвате исключения. Рассмотрим правильный шаблон кода:
&НаСервере
Процедура СоединениеНаСервере()
Попытка
Подключение = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=ИмяСервера;Ref=ИмяБазы;Usr=Администратор;Pwd=Пароль;";
ВнешняяБаза = Подключение.Connect(СтрокаПодключения);
// Для проверки соединения выполним простое действие внутри сеанса
ИмяТекущейКонфигурации = ВнешняяБаза.Метаданные.Имя;
Сообщить("Успешное подключение к базе: " + ИмяТекущейКонфигурации);
Исключение
ИнформацияОбОшибке = ОписаниеОшибки();
Сообщить("Ошибка при установке COM-соединения: " + ИнформацияОбОшибке);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Соединение(Команда)
СоединениеНаСервере();
КонецПроцедуры
Если сервер 1С работает в 64-разрядном режиме, а вызов Новый COMОбъект("V83.COMConnector") выполняется на сервере, регистрировать необходимо 64-битную версию библиотеки. Разберем порядок действий:
regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
После успешной регистрации в реестре Windows появится соответствующий класс, доступный для 64-битных процессов.
Если на сервере установлена только 32-разрядная компонента или требуется обращаться к 32-битным внешним библиотекам из 64-битного кода 1С, настроим суррогатный процесс через службу компонентов Windows (DCOM):
dcomcnfg).V83_COMConnector) и укажем тип активации Серверное приложение (Server Application).comcntr.dll из каталога Program Files (x86)\1cv8\8.3.XX.XXXX\bin\.dllhost.exe.Сервер 1С:Предприятия запускается под специальной сервисной учетной записью (по умолчанию USR1CV8). Проверим следующие системные разрешения:
comcntr.dll.Механизм COMConnector имеет ряд критических ограничений: он работает исключительно под управлением ОС Windows, чувствителен к разрядности процессов и жестко привязан к конкретной версии сборки платформы. Для построения надежной интеграции рекомендуется использовать современные механизмы: