|
Как поступить при долгом http сеансе?
Terrixus, boozin, Волшебник, arsik, phabeZ, avkynev, program345, timurhv, Бычье сердце, oleg_km, ReaLg, Мультук, Lazy Stranger, mikecool, Hawk_1c, Sneer, H A D G E H O G s, Vstur, rozer76, obs191, Philix, Dedal, программистище, formista2000, BayJay, Builder, trad, ndrv, Crusher, Alex33, vicof, FormatC, Ёпрст, Гость из Мариуполя, Silgis, lubitelxml, kubik_live, Климов Сергей, Franchiser, p-soft, reloc
| ☑ |
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) Наверняка Вы накосячите в алгоритме, а исходный файл уже будет удалён
|
|