Требовалось организовать доступ к внутреннему хранилищу с сервера заказчика. Завернули tcp в http и выкинули наружу. Но при попытке подключиться поняли, что версии у нас и у них разные, а разработчики платформы 1С решили не заморачиваться с версиями и просто запретили подключаться к хранилищу с любой другой версии, кроме той, что у хранилища.
Проведя анализ трафика через WireShark, я заметил, что главное отличие в пакетах на разных платформах, это передача в xml версии платформы конфигуратора в запросе и версии платформы хранилища в ответе:
<?xml version="1.0" encoding="UTF-8"?>
<crs:call xmlns:crs="http://v8.1c.ru/8.2/crs" alias="repo/test.cfe" name="DevDepotAdmin_openDevDepot" version="8.3.18.1334">
<crs:params>
<crs:alias value="repo/test.cfe"/>
<crs:convert value="false"/>
</crs:params>
</crs:call>
Ну и само собой я решил подменить версию на ту, что ждёт сервер хранилища, и у меня получилось. Правда, пришлось сильно погрузится в Node.js, а именно в потоки.
В итоге я смог подключить конфигурацию ERP/УХ к серверу хранилища (версия 8.3.20.1789) через конфигуратор (версия 8.3.21.1302), т.е. от нового к старому. Время подключения если и поменялось, то незаметно (замеры не делал).
Также тестировал и от старого (версия 8.3.18.1334) к новому (версия 8.3.20.1789), всё прошло гладко.
Захват объектов, помещение, получение и даже администрирование работает без проблем.
Преобразование и пересылка пакетов происходит "на лету" и не жрёт ОЗУ.
Для трансформации пакетов требуется запустить сервис, написанный на Node.js.
Шаги:
1. В файле repo_1c_broker.js требуется указать настройки сервиса:
const service_port = 8000 // порт сервиса трансформации пакетов
const repo_host = 'my.server.ru' // сервер хранилища конфигурации (может быть IP)
const repo_port = '8880' // порт хранилища конфигурации
const repo_version = '8.3.20.1789' // версия хранилища конфигурации
2. Запустить сервис:
node.exe repo_1c_broker.js
* node.exe - это исполняемый файл интерпретатора Node.js. Установить можно отсюда.
3. При подключении к хранилищу подменить адрес на http://localhost:8000/, если вы запустили сервис транформации на компьютере с конфигуратором, либо http://адрес_машины_с_сервисом:8000/ если в другом месте.
Например:
Если раньше вы подключались к хранилищу по адресу:
http://192.168.100.2/repo/repo.1ccr/proj01
то теперь надо так:
http://localhost:8000/repo/repo.1ccr/proj01
Возможно, в каких-то платформах есть изменения в службе хранилища, но я давно их не видел в зазеркалье.