Создал http-сервис, к его методу обращается сайт POST запросом, в POST запросе приходит информация, которую я перевожу из JSON и записываю в регистр сведений. У сайта стоит таймаут 3 секунды (изменить это нельзя) и если в течение трех секунд сайт не получил ответа на запрос, то он шлет его снова. Проблема в том, что даже с просто записью данных в регистр таймаут довольно часто превышается, из-за чего запрос приходит заново и информация дублируется в регистре сведений. Регистр периодический с периодом секунда и больше период сделать не представляется возможным. Вопрос в следующем: можно ли как-то не костыльно решить вопрос с таймаутом? Думал в сторону имитации асинхронных вызовов, но так и не нашёл возможности реализации на 1С. Каждый раз лезть в регистр и проверять не записались ли такие же данные несколько секунд назад очень не хочется, так как оперативность будет страдать ещё больше. Если у кого есть идеи, буду благодарен
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Тут все упирается в возможность правки на сайте.
А так как вариант:
Добавить РС. ОчередьОбработкиЗапросов.
При POST запросе сайта присваивать новый УИД и вносить в этот регистр, с отправкой его сайту.
При обработке что нужно, внесение в регистр подтверждающей информации.
Через определенной время на сайте уже GET запрос с передачей этого номера и возврат данных из регистра. После чего удаление записи из регистра сразу или регламентным заданием позже.
Думал в сторону имитации асинхронных вызовов, но так и не нашёл возможности реализации на 1С.
Тут все упирается в возможность правки на сайте.
А так как вариант:
Добавить РС. ОчередьОбработкиЗапросов.
При POST запросе сайта присваивать новый УИД и вносить в этот регистр, с отправкой его сайту.
При обработке что нужно, внесение в регистр подтверждающей информации.
Через определенной время на сайте уже GET запрос с передачей этого номера и возврат данных из регистра. После чего удаление записи из регистра сразу или регламентным заданием позже.
(1) Вариантов решения 2 (два)
1) С сайта должно приходит какое-то уникальное поле. Уникальное для каждой повторной отправки данных
В 1С где-либо записываем значение этого уникального поля. При получении данных сверяем значение этого уникального поля с теми, которые уже записаны в базу
Дальше, думаю, понятен список действий
2) Исходим из того, что время записи в базу больше, чем 3 секунды. Далее все просто. При получении данных с сайта "ставим маркер" что данные с сайта временно не принимаются.
Т.е. создаем, например, реквизит "ДанныеНеПринимать" и присваиваем ему значение Истина (возможны другие варианты). Пока ДанныеНеПринимать = Истина обрываем все попытки получения дынных с сайта. Когда база, наконец-то, все обработает переходим к следующему действию. Ждем очередную передачу данных с сайта. Знаем, что это - повторная отправка предыдущих, уже обработанных данных. Поэтому ничего с этими данными не делаем. Сразу посылаем сайту необходимый ответ (полученный на предыдущем шаге). И присваиваем реквизиту "ДанныеНеПринимать" значение Ложь. Это все..
Исходя из текста вопроса предполагаю, что нужен 2-й вариант действий
1) С сайта должно приходит какое-то уникальное поле. Уникальное для каждой повторной отправки данных
В 1С где-либо записываем значение этого уникального поля. При получении данных сверяем значение этого уникального поля с теми, которые уже записаны в базу
Дальше, думаю, понятен список действий
2) Исходим из того, что время записи в базу больше, чем 3 секунды. Далее все просто. При получении данных с сайта "ставим маркер" что данные с сайта временно не принимаются.
Т.е. создаем, например, реквизит "ДанныеНеПринимать" и присваиваем ему значение Истина (возможны другие варианты). Пока ДанныеНеПринимать = Истина обрываем все попытки получения дынных с сайта. Когда база, наконец-то, все обработает переходим к следующему действию. Ждем очередную передачу данных с сайта. Знаем, что это - повторная отправка предыдущих, уже обработанных данных. Поэтому ничего с этими данными не делаем. Сразу посылаем сайту необходимый ответ (полученный на предыдущем шаге). И присваиваем реквизиту "ДанныеНеПринимать" значение Ложь. Это все..
Исходя из текста вопроса предполагаю, что нужен 2-й вариант действий
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот