Возникла ошибка при получении файла из 1C:Bitrix средствами 1с из УТ 11.2, казалось, при обычном соединении, всё как всегда правильно.
Предположение:
- медлительность битрикса
- медлительность или некорректная работа 1с
- удаленность сайта или его расположение
- особенности платформы или клиентской части
Характеристика клиента:
Платформа 8.3.6.2390, Windows 7 64 bit, ssd, usb-ключ, файловый вариант.
Прочие условия:
Использование Winhttp невозможно, так как сервер заказчика работает под управлением linux.
Решение:
Игра с параметрами таймаутов и заголовков не давала результатов, т.е. файл мог загрузиться, а мог и не загрузиться.
Парадоксально, но после добавления циклической попытки получения, загрузка стала отрабатывать с первого раза.
Пример кода
Соединение = Новый HTTPСоединение(АдресСайта, , , , , 1500 ); ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить(«Content-Type», «text/html;charset=UTF-8»); ЗаголовокHTTP.Вставить(«Keep-Alive»,»timeout=30, max=100;»); ЗаголовокHTTP.Вставить(«Connection»,»keep-alive»); ЗаголовокHTTP.Вставить(«User-Agent»,»Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12785 YaBrowser/13.12.1599.12785 Safari/537.36″); ЗаголовокHTTP.Вставить(«Host», АдресСайта); HTTPЗапрос = Новый HTTPЗапрос(АдресФайла,ЗаголовокHTTP); Попытка СчетчикПопыток = 1; Пока СчетчикПопыток<20 Цикл Попытка Результат = Соединение.Получить(HTTPЗапрос,ИмяФайлаЗапроса); Сообщить(«Получено с «+СчетчикПопыток +» попытки»); Прервать; Исключение СчетчикПопыток = СчетчикПопыток+1; КонецПопытки; КонецЦикла; Если Результат.КодСостояния >299 Тогда СтрокаСообщения = «Код состояния » + Результат.КодСостояния + » файл не запрошен»; Сообщить(СтрокаСообщения); Возврат Ложь; КонецЕсли; Исключение СтрокаСообщения = ОписаниеОшибки(); Сообщить(СтрокаСообщения, СтатусСообщения.Важное); Возврат Ложь; КонецПопытки;
Но счастье длилось недолго и 20 попыток стало мало. Пришлось увеличить количество попыток до 50 и тогда отдача пошла с 40 попытки.
Надеюсь битрикс не заблокирует эту DDoS-атаку, но пока работает.
Перезапуск 1С Предприятия опять запустило скачку с первой попытки. Платформа? Нестабильность работы сервера bitrix?
Далее: не хватает и 50, сразу после этого — с 8.
Ситуация из разряда, когда всё делаешь правильно, но от тебя ничего не зависит и приходится использовать «костыли».
Можно вынести один положительный момент — получается хорошая универсальная «болванка» кода подключения, с отработкой большинства ньюансов.
Реклама — двигатель торговли: сотня двигает, один торгует.