При обновлении платформы «1С:Предприятие» системные администраторы и разработчики нередко сталкиваются с ситуацией, когда регламентный или ручной обмен между базами данных завершается критической ошибкой несоответствия версий. Типичный сценарий: на сервере развернута 64-битная версия платформы, однако при попытке установить соединение через COMОбъект система сообщает о конфликте версий библиотек, пока принудительно не будет установлена 32-разрядная версия коннектора. Проанализируем, почему возникает эта неполадка, как устроена работа COM-компонентов в операционной системе Windows и какими способами можно навсегда решить проблему взаимодействия разноразрядных приложений.
Для понимания корня проблемы разберем механизм вызова COM-объекта в программном коде 1С. Когда выполняется типовая инициализация соединения:
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector");
УстановленноеСоединение = COMСоединитель.Connect(СтрокаПодключения);
Исключение
ЗаписьЖурналаРегистрации("ОшибкаCOM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
операционная система обращается к системному реестру Windows, чтобы отыскать зарегистрированный класс с идентификатором V83.COMConnector и загрузить соответствующую динамическую библиотеку comcntr.dll. Разрядность загружаемой библиотеки строго диктуется разрядностью процесса, инициирующего вызов, а не форматом информационной базы (файловая она или клиент-серверная):
rphost.exe (например, внутри фонового задания) или в 64-битном клиенте, Windows обращается к основной 64-разрядной ветке реестра и требует загрузки 64-битного файла comcntr.dll.WOW6432Node, где ищет 32-битную версию коннектора.Ошибка различия версий возникает в двух случаях: либо в соответствующей ветке реестра осталась ссылка на старый номер релиза платформы после незавершенного обновления, либо номер сборки используемой библиотеки comcntr.dll не совпадает до последней цифры с версией запущенного кластера серверов 1С.
Рассмотрим порядок ручной регистрации COM-компонентов. Стандартная утилита регистрации regsvr32 ведет себя по-разному в зависимости от того, из какого системного каталога она запущена. Если выполнить команду без указания полного пути, на 64-битной системе будет задействована 64-битная утилита, что не обновит записи для 32-битных клиентов.
Разберем по шагам регистрацию библиотек через командную строку, запущенную с правами администратора:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Важно: При установке новой платформы через стандартный инсталлятор флаг установки компонента COM-соединение по умолчанию может быть выключен. Проверьте через «Панель управления» -> «Программы и компоненты» -> «Изменить», установлен ли соответствующий модуль в составе дистрибутива нужной версии платформы.
Посмотрим на более универсальное и надежное архитектурное решение. Чтобы не устанавливать две платформы (x86 и x64) одновременно и исключить конфликты разрядностей, настроим специальное приложение COM+ на сервере. В этом случае библиотека comcntr.dll будет запускаться в изолированном суррогатном процессе Windows dllhost.exe, к которому смогут беспрепятственно обращаться процессы любой битности.
Разберем пошаговый процесс настройки приложения в оснастке Windows:
dcomcnfg и нажмите Enter для запуска консоли «Службы компонентов».1CV8_COMConnector) и укажите тип активации Серверное приложение (Server application).ragent сервера 1С).comcntr.dll из подкаталога bin установленной 64-битной платформы 1С:
C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll
V83.COMConnector, перейдите на вкладку Транзакции и убедитесь, что переключатель установлен в положение Не поддерживаются.При такой конфигурации любые запросы на создание COM-соединения перенаправляются в отдельный процесс dllhost.exe, что полностью снимает зависимость от разрядности клиента и защищает рабочий процесс сервера 1С от случайных сбоев внешнего модуля.
Проанализируем эксплуатационные особенности COM-коннектора. Несмотря на привычность, механизм COM накладывает жесткие инфраструктурные ограничения:
rphost.В современной корпоративной разработке рекомендуется заменять COM-соединения на протоколы сетевого обмена: