Возникла ошибка при получении файла из 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.
Заключение
Ситуация из разряда, когда всё делаешь правильно, но от тебя ничего не зависит и приходится использовать «костыли».
Можно вынести один положительный момент — получается хорошая универсальная «болванка» кода подключения, с отработкой большинства ньюансов.
Люди в массе своей терпеть не могут рекламу. Они никогда не читают рекламных объявлений как таковых. Но они читают подряд все, что их заинтересует, и иногда этим оказывается рекламное объявление.