Имя: Пароль:
1C
 
Как поступить при долгом http сеансе?
0 program345
 
29.07.25
13:39
Привет! Мне по http cервису прилетает xml на 3 мегабайта в теле, и в 1с формирую множество документов в транзакции, отправитель просит отправить ему подтверждение 200 о получении и дальше обрабатывать этот файл чтобы ему не висеть в сеансе http час. Если сделаю возврат то потеряю доступ к файлу, остается только сохранить файл, отправить подтверждение 200 отправителю и потом его обрабатывать или есть еще предложения?

Функция httpОбработчик(Запрос) Экспорт
    
    ЧтениеXML = Новый ЧтениеXML;
    
    СтрXML = Запрос.ПолучитьТелоКакСтроку();
    ЧтениеXML.УстановитьСтроку(СтрXML);
    
    ЭлементыXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
        //обычно тут формирую кипу документов

    Результат = Новый HTTPСервисОтвет(200)
    Возврат Результат;

КонецФункции;
1 mikecool
 
29.07.25
13:42
тебе разрешение выписать? именно так и надо делать
2 mikecool
 
29.07.25
13:42
про очереди слышал?
3 Волшебник
 
29.07.25
13:43
httpОбработчик - плохое имя обработчика
4 Волшебник
 
29.07.25
13:51
(0) В ответ надо выдать номер задачи, по которому вызывающая сторона сможет уточнить статус обработки и получить итог с расшифровкой по элементам.
5 Волшебник
 
29.07.25
13:53
(0) Можно запустить фоновое задание и далее сразу вернуть ответ 200 и ID задания. При завершении фонового задания результат положить в регистр сведений. Другой веб-сервис по ID задания ищет его среди запущенных или в регистре сведений.
6 program345
 
29.07.25
13:57
(2) не, не слыхал.
7 mikecool
 
29.07.25
14:24
предложение есть - сделай, чтобы твой код отработал за доли секунды и отправь ответ 200
8 program345
 
29.07.25
14:37
изначально хотел асинхронно выполнить, но потом вижу что Асинх
Модификатор применим только к процедуре, выполняемой на клиенте. А я на сервере.
9 Волшебник
 
29.07.25
14:39
(8) Запускайте фоновое задание, оно асинхронное
10 Бычье сердце
 
29.07.25
14:48
(0)
"остается только сохранить файл, отправить подтверждение 200"
Лучше тут ничего не придумать. Складывайте файлы в отдельный каталог, а дальше регламентом загружайте документы из этого каталога.
11 timurhv
 
29.07.25
14:48
Фоновые не гарантируют запись объектов. Службу сервера 1С могут в момент транзакции остановить для обновления платформы или еще чего.
Пишите в регистр сведений, потом разбирайте. Можете оставлять записи в течение 7 дней для разбора инцидентов, старше - удалять.
12 Бычье сердце
 
29.07.25
14:50
(10)
+
Подойдет даже, если прилетает множество файлов
13 program345
 
29.07.25
15:25
(11) а разбирать из регистра то все равно регламентным придется? или я вас не понял.

Если я буду считывать файл из каталога регламентным заданием, в транзакции записывать документы и после транзакции Удалять его если нет ошибок какие тогда проблемы могут случиться если остановят Службу сервера 1С?
14 Волшебник
 
29.07.25
15:40
(13) Наверняка Вы накосячите в алгоритме, а исходный файл уже будет удалён
15 program345
 
31.07.25
09:56
(11) создал регистр сведений, в строковый реквизит неограниченной длины пишу xml. Или лучше в хранилище значения пулять?
16 Волшебник
 
31.07.25
10:00
(15) Лучше в хранилище значения со сжатием данных
17 OldCondom
 
31.07.25
10:06
Я бы файлы живые тоже оставлял параллельно. Хранение таких логов может выйти боком потом(забитый регистр/долго извлекать для анализа и т.д.) +файлы запишутся даже при отвалившейся транзакции.
18 Мультук
 
гуру
31.07.25
10:20
(17)

1) Откуда транзакция в "httpОбработчик" ?
2) Нет файла. Есть

СтрXML = Запрос.ПолучитьТелоКакСтроку();


3) Это не столько регистр логов, скорее это регистр очереди
4) Автору никто не мешает СРАЗУ написать механизм,
который будет автоочищать этот регистр автоматически или писать письма счастья в случае проблем
19 OldCondom
 
31.07.25
10:23
(18) сам тс написал в (0) написал.
Плюс работал в компании, где в регистре просто логи хранили и небольшие кусочки json. В итоге все встало таким раком, что пришлось изобретать велосипед на ЖР(чтобы перейти на файловое хранение).