Повторный запуск алгоритма при ошибке COM соединения

1. silly 8 09.06.24 12:18 Сейчас в теме
Всем доброго дня, коллеги. Ситуация такова: у меня существует внешняя обработка которая делает некоторые изменения элементов справочников внешних баз через com соединение (использую V83.COMConnector). Все чин по чину, при записи элемента стоит попытка, обработка исключений ( если происходили какие-либо ошибки логики, то все норм отрабатывает и возвращает инф об ошибке ). Однако, на каких-то конкретных элементах соединение зависает, через какое-то время, с точки, где происходит запись, платформа пытается воспроизвести весь алгоритм заново. Т.е. мы были на сервере, попытались записать, зависли, и алгоритм пытается отработать с самого начала, вызываясь с клиента нашего, снова инициируя соединение. После того, как она второй раз произвела алгоритм и пытается записать тот же элемент, сеанс базы из которой подключаюсь падает с "неисправимая ошибка сервера".
Пока я предполагаю(но дальше продолжаю разбираться), что во время записи происходит какая-то ошибка, и быть может даже приходит ответ от com соединения, но по какой то причине мой сеанс этот ответ не устраивает, он пытается снова продолбить алгоритм и на 2ой раз у меня просто сеансы друг на друга кладутся и конечно все падает...
Пытаюсь найти ответ, почему же платформа по второму кругу пытается воспроизвести алгоритм, и нормальное ли это вообще поведение, не понимаю механизм. Может кто-то сталкивался с подобным поведением и сможет помочь советом/статьей по теме, т.к. пока не гуглится совсем ничего.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. silly 8 10.06.24 16:14 Сейчас в теме +2 $m
Проблема решена: оказывается, при записи, была подписка на события и при некоторых условиях вызывались процедуры модуля без признака внешнего соединения, при обращении к ним все ложилось с неисправимой ошибкой. Такие дела
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. anton13m 2 10.06.24 10:19 Сейчас в теме
(1)
Пока я предполагаю

Там алгоритмы запуска ракет с кодами, что их нельзя опубликовать и мы должны также предполагать и гадать?
3. silly 8 10.06.24 10:35 Сейчас в теме
(2) :D код большой, не вижу смысла его сюда кидать. Если совсем упростить, это может выглядеть так:

//Подключаюсь
ПараметрыПодключенияИБ = "Srvr="""+Подключение.ИмяСервера+"""; Ref="""+Подключение.ИмяБазы+"""; Usr="""+Подключение.Пользователь+"""; Pwd="""+Подключение.Пароль+"""";


V83COMCon = Новый COMОбъект("V83.COMConnector");
Соединение = V83COMCon.Connect(ПараметрыПодключенияИБ);

//Получаю какой-то объект из соединения, меняю какие-то реквизиты, напр. наименование, записываю ( Приемник - COMОбъект, ссылка )

ПриемникОбъект = Приемник.ПолучитьОбъект();
ПриемникОбъект.Наименование = Источник.Наименование;

Попытка
ПриемникОбъект.Записать();
Исключение
//обрабатываю
КонецПопытки;

____________________________________________________________­________________________________

В основном все ок, на большинстве элементов отрабатывает, при нарушении логики - отрабатывает исключение. Но на конкретных позициях летит с неисправимой ошибкой, ЖР пустые по этому поводу и в моей базе и в приемнике, к которому подключаюсь.
7. nomad_irk 76 10.06.24 11:58 Сейчас в теме
(1)Очень похоже, что на удаленной стороне "умирает" процесс rphost и происходит запуск нового.
4. starik-2005 3060 10.06.24 10:46 Сейчас в теме
Если что-то не гуглится - это точка роста. В современном мире таких точек почти не осталось, так что топикастеру повезло.

1. Попробовать выполнить код, на котором зависает, в консоли кода в той базе, в которую записывается объект. Посмотреть, что из этого выйдет. По крайней мере понятно станет, что там за проблема (например, там обычное приложение, которое окно вешает при незаполненности какого-нить реквизита и ждет, когда заполнят).
2. Если алгоритм выполнить еще раз, то переменная с СОМ-объектом перезапишется, а старая переменная грохнется, выйдя из зоны видимости. Из-за этого и падение. Ну дважды два ведь.
3. А как же веб-сервисы, ХТТП 2.0 и все такое прочее? Почему древний СОМ-объектный обмен? А завтра попросят перейти на линукс и что, побежишь искать работу?
Fox-trot; silly; +2 Ответить
5. silly 8 10.06.24 11:00 Сейчас в теме
(4) Спасибо за ответ! Да, сейчас попробую в приемнике алгоритм выполнить , посмотрим что будет, отпишу сюда. У меня видимо уже глаз и мозг замылился, раз я этого еще не попробовала :) . По поводу 2го да, понимаю, у меня интерес как раз таки в том, а почему вообще он на 2 круг алгоритм запускает... я этого не делаю, и это какое то странное поведение, как по мне. А на ком выбор пал потому что это показалось относительно проще чем писать хттп и веб ( обработка разовая, потом не будет использоваться, хотелось все сделать в одном месте ).
6. silly 8 10.06.24 11:25 Сейчас в теме
(4) все норм на стороне приемника прошло, записала элемент с теми же значениями рекв-в, что пихаю через ком. В итоге и через ком теперь элемент записывается. Так уже было с одним из элементов, если я в приемнике подставляю нужные мне реквизиты, то он норм и в предприятии и программно пишет, а потом и в ком все ок( в общем прошло, но понимания чего мой ком летит так и нет пока :(
8. Fox-trot 161 10.06.24 12:04 Сейчас в теме
(6) нужно на другом объекте опробовать, видима есть реквизиты незаполненные, но обязательные к заполнению
но это уже в логах мона прочитать, ежели есть таковые
9. silly 8 10.06.24 16:14 Сейчас в теме +2 $m
Проблема решена: оказывается, при записи, была подписка на события и при некоторых условиях вызывались процедуры модуля без признака внешнего соединения, при обращении к ним все ложилось с неисправимой ошибкой. Такие дела
10. silly 8 10.06.24 16:15 Сейчас в теме
Видимо в таких ситуациях нет описания ошибки итд, просто сеанс кладется
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот