Имя: Пароль:
1C
 
Странный сбой http сервиса
0 FirstLine Support
 
29.11.22
20:13
В БП30 добавил свой http сервис, совершенно простейший – создание документа в базе. Всё работает, разумеется есть и файл логирования, пишет текстовый файлик на диск. Есть проблема, изредка (раз в сутки) случаются странные сбои:  по одному запросу создаётся два документа. Естественно посмотрел совой лог: был удивлён. Нет, не так, был очень сильно удивлён. По логу выходит, что процедура сервиса действительно создаёт два документа, причем управление передаётся куда-то в середину процедуры, между расшифровкой запроса и созданием документа и процесс создания как бы задваивается.

В модуле объекта ПередЗаписью поставил контроль дублей, но сам факт интересен. Никто не сталкивался?
1 hockeyist
 
29.11.22
20:38
(0) Интересно, сколько постов пройдет до того, как ТС напишет что-то типа "я идиот"?
2 FirstLine Support
 
29.11.22
20:42
(1) 16?
3 Genayo
 
29.11.22
21:00
(0) Чудес не бывает, скорее всего кривой код создания документа.
4 FirstLine Support
 
29.11.22
21:18
(3) да было подозрение, я два раза документ записывал, первый раз просто записывал, второй раз проводил. Естественно убрал эту фигню, стал просто записывать в режиме проведения.
Ну не знаю... В остальном всё стандартно, в документе проводок нет, документ самописный, простейший
5 ass1c
 
30.11.22
09:05
(4) - Будь мужиком! Покажи код!
6 mikecool
 
30.11.22
09:08
(0) если считаешь, что сбой - почисти серверный кеш, рестартани веб-сервер
но думаю (1) прав
7 Dzenn
 
гуру
30.11.22
09:41
1 — в запрос также передавать уникальный идентификатор или что-то подобное
2 — записывать уникальный идентификатор в какое-то поле созданного документа
3 — перед записью документа проверять наличие документов с этим уникальным идентификатором, и если они есть, то ничего не делать
8 mikecool
 
30.11.22
10:26
документ создавать отдельным фоновым, сервис только получает данные и запускает ФЗ
9 FirstLine Support
 
30.11.22
10:28
(7) именно по этой схеме и работаю. В запросе приходи ИД транзакции. Проверяю есть ли в базе документы с таким ИД. Если есть, даю ответ клиенту, что он не прав, у себя пишу в лог ошибку, разумеется дубль не создаю. Но каким-то непонятным образом, функция создания документа (оформлено отдельной функцией) ИНОГДА запускается дважды судя по логу. Проверка не срабатывает. Пока сделал такую же проверку непосредственно в модуле объекта документа
10 Галахад
 
гуру
30.11.22
10:29
Кстати, да. Возможно не две записи в одном запросе, а два запроса. Т.е. источник не получил ответ и запустил новый запрос.
11 FirstLine Support
 
30.11.22
10:31
(10) тоже думал в эту сторону
12 rozer76
 
30.11.22
10:31
(9) см (8)
13 FirstLine Support
 
30.11.22
10:32
(12) в чем преимущество такой асинхронности?
14 Галахад
 
гуру
30.11.22
10:32
(11) Ну, это можно посмотреть по логам.
15 FirstLine Support
 
30.11.22
10:35
(14) к сожалению лог не видит, что запрос приходит два раза. Это и вводит меня в недоумение
16 Мимохожий Однако
 
30.11.22
10:38
Документ можно искать не по ИД транзакции, а по номеру
17 Галахад
 
гуру
30.11.22
10:42
(13) Как минимум в производительности. Если толпа клиентов стучится в сервис, то вероятны ошибки.

(15) Лог не настроен или в логе нет дублей?
18 FirstLine Support
 
30.11.22
10:47
(17) да, согласен, очередь на РС сделать не сложно, буду запускать ФЗ

лог говорит, что есть ОДИН заход в процедуру, которая привязана к http методу, а дальше происходи какое-то безумие, фиксируется создание двух документов. Возможно нужно очень подробно логировать, чтобы выяснить в какой строчке происходит вот это всё
19 FirstLine Support
 
30.11.22
10:57
(16) номера не дублируются
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.