Автор: Александр Кунташов <kuntashov@gmail.com> (подробнее обо мне)
Как известно, после недавнего большого падения облако Битрикс24 переехало в немецкий датацентр AWS.
После этого у нескольких моих клиентов и у меня на тестовом стенде обмен с товарами и счетами периодически стал падать с ошибками:
- Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль, а также настройки подключения к Интернет.
- Не удалось установить соединение с сервером https://example.bitrix24.ru. Проверьте правильность адреса сервера, порт, имя пользователя и пароль.".
Ошибка была плавающая - то обмен ломался, то снова начинал работать.
Почти час провел в отладчике, пока наконец-то не обратил внимание, что ПараметрыПодключения.ЗащищенноеСоединение
имеет Булев тип и не вспомнил, что в 8.3 для установки защищенного соединения нужно передавать объект (а в 8.2 просто истину), что заставило меня сверить сигнатуру конструктора объекта HTTPСоединение
с Синтакс-помощником. И оказалось, что в 8.3 по сравнению с 8.2:
- В 8.2 было два варианта конструктора: с таймаутом (в 6й позиции) и без (в 6й позиции передавалось булево значение: устанавливать защищенное соединение или нет); в модуле
ОбменССайтом
использовался вариант без таймаута, т.е. 6м аргументом при подключении к порталу Б24 передавалось значениеИстина
, т.к. в облаке все порталы работают по https; - В 8.3 остался только один вариант - с таймаутом, который передается 6м аргументом. В результате, передаваемое 6м аргументом значение
Истина
неявно преобразовывалось к числу1
, что означало установку таймаута = 1 сек.
Переезд облака Б24 на немецкие серверы, очевидно увеличил пинг (или время отклика облачных порталов увеличилось по каким-то другим причинам) и 1 секунды на установку соединения стало явно не хватать, и оно отваливалось по таймауту. Отсюда и "плавающий" характер ошибки: чуть больше время отклика (пинг) - соединение рвется, чуть меньше - все работает.
Подчеркну, что ошибка воспроизводится на платформе во всех версиях УТ 11.3 при работе на платформе 1С:Предприятие 8.3 (проверил в том числе на актуальном на сегодня релизе 11.3.4.185). upd. Что примечательно, в 11.4 ошибка исправлена (проверил на актуальном 11.4.2.139).
Для исправления ошибки нужно в модуле ОбменССайтом
в методе СоединениеССервером()
строки
Соединение = Новый HTTPСоединение(
ПараметрыПодключения.Сервер,
ПараметрыПодключения.Порт,
ПараметрыПодключения.Пользователь,
ПараметрыПодключения.Пароль,
ПараметрыПодключения.Прокси,
ПараметрыПодключения.ЗащищенноеСоединение
);
заменить на
ЗащищенноеСоединение = Неопределено;
Если ПараметрыПодключения.ЗащищенноеСоединение Тогда
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
КонецЕсли;
Соединение = Новый HTTPСоединение(
ПараметрыПодключения.Сервер,
ПараметрыПодключения.Порт,
ПараметрыПодключения.Пользователь,
ПараметрыПодключения.Пароль,
ПараметрыПодключения.Прокси,
120,
ЗащищенноеСоединение
);