Повторный запуск алгоритма при ошибке COM соединения
Всем доброго дня, коллеги. Ситуация такова: у меня существует внешняя обработка которая делает некоторые изменения элементов справочников внешних баз через com соединение (использую V83.COMConnector). Все чин по чину, при записи элемента стоит попытка, обработка исключений ( если происходили какие-либо ошибки логики, то все норм отрабатывает и возвращает инф об ошибке ). Однако, на каких-то конкретных элементах соединение зависает, через какое-то время, с точки, где происходит запись, платформа пытается воспроизвести весь алгоритм заново. Т.е. мы были на сервере, попытались записать, зависли, и алгоритм пытается отработать с самого начала, вызываясь с клиента нашего, снова инициируя соединение. После того, как она второй раз произвела алгоритм и пытается записать тот же элемент, сеанс базы из которой подключаюсь падает с "неисправимая ошибка сервера".
Пока я предполагаю(но дальше продолжаю разбираться), что во время записи происходит какая-то ошибка, и быть может даже приходит ответ от com соединения, но по какой то причине мой сеанс этот ответ не устраивает, он пытается снова продолбить алгоритм и на 2ой раз у меня просто сеансы друг на друга кладутся и конечно все падает...
Пытаюсь найти ответ, почему же платформа по второму кругу пытается воспроизвести алгоритм, и нормальное ли это вообще поведение, не понимаю механизм. Может кто-то сталкивался с подобным поведением и сможет помочь советом/статьей по теме, т.к. пока не гуглится совсем ничего.
Пока я предполагаю(но дальше продолжаю разбираться), что во время записи происходит какая-то ошибка, и быть может даже приходит ответ от com соединения, но по какой то причине мой сеанс этот ответ не устраивает, он пытается снова продолбить алгоритм и на 2ой раз у меня просто сеансы друг на друга кладутся и конечно все падает...
Пытаюсь найти ответ, почему же платформа по второму кругу пытается воспроизвести алгоритм, и нормальное ли это вообще поведение, не понимаю механизм. Может кто-то сталкивался с подобным поведением и сможет помочь советом/статьей по теме, т.к. пока не гуглится совсем ничего.
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) :D код большой, не вижу смысла его сюда кидать. Если совсем упростить, это может выглядеть так:
//Подключаюсь
ПараметрыПодключенияИБ = "Srvr="""+Подключение.ИмяСервера+"""; Ref="""+Подключение.ИмяБазы+"""; Usr="""+Подключение.Пользователь+"""; Pwd="""+Подключение.Пароль+"""";
V83COMCon = Новый COMОбъект("V83.COMConnector");
Соединение = V83COMCon.Connect(ПараметрыПодключенияИБ);
//Получаю какой-то объект из соединения, меняю какие-то реквизиты, напр. наименование, записываю ( Приемник - COMОбъект, ссылка )
ПриемникОбъект = Приемник.ПолучитьОбъект();
ПриемникОбъект.Наименование = Источник.Наименование;
Попытка
ПриемникОбъект.Записать();
Исключение
//обрабатываю
КонецПопытки;
____________________________________________________________ ________________________________
В основном все ок, на большинстве элементов отрабатывает, при нарушении логики - отрабатывает исключение. Но на конкретных позициях летит с неисправимой ошибкой, ЖР пустые по этому поводу и в моей базе и в приемнике, к которому подключаюсь.
//Подключаюсь
ПараметрыПодключенияИБ = "Srvr="""+Подключение.ИмяСервера+"""; Ref="""+Подключение.ИмяБазы+"""; Usr="""+Подключение.Пользователь+"""; Pwd="""+Подключение.Пароль+"""";
V83COMCon = Новый COMОбъект("V83.COMConnector");
Соединение = V83COMCon.Connect(ПараметрыПодключенияИБ);
//Получаю какой-то объект из соединения, меняю какие-то реквизиты, напр. наименование, записываю ( Приемник - COMОбъект, ссылка )
ПриемникОбъект = Приемник.ПолучитьОбъект();
ПриемникОбъект.Наименование = Источник.Наименование;
Попытка
ПриемникОбъект.Записать();
Исключение
//обрабатываю
КонецПопытки;
____________________________________________________________
В основном все ок, на большинстве элементов отрабатывает, при нарушении логики - отрабатывает исключение. Но на конкретных позициях летит с неисправимой ошибкой, ЖР пустые по этому поводу и в моей базе и в приемнике, к которому подключаюсь.
Если что-то не гуглится - это точка роста. В современном мире таких точек почти не осталось, так что топикастеру повезло.
1. Попробовать выполнить код, на котором зависает, в консоли кода в той базе, в которую записывается объект. Посмотреть, что из этого выйдет. По крайней мере понятно станет, что там за проблема (например, там обычное приложение, которое окно вешает при незаполненности какого-нить реквизита и ждет, когда заполнят).
2. Если алгоритм выполнить еще раз, то переменная с СОМ-объектом перезапишется, а старая переменная грохнется, выйдя из зоны видимости. Из-за этого и падение. Ну дважды два ведь.
3. А как же веб-сервисы, ХТТП 2.0 и все такое прочее? Почему древний СОМ-объектный обмен? А завтра попросят перейти на линукс и что, побежишь искать работу?
1. Попробовать выполнить код, на котором зависает, в консоли кода в той базе, в которую записывается объект. Посмотреть, что из этого выйдет. По крайней мере понятно станет, что там за проблема (например, там обычное приложение, которое окно вешает при незаполненности какого-нить реквизита и ждет, когда заполнят).
2. Если алгоритм выполнить еще раз, то переменная с СОМ-объектом перезапишется, а старая переменная грохнется, выйдя из зоны видимости. Из-за этого и падение. Ну дважды два ведь.
3. А как же веб-сервисы, ХТТП 2.0 и все такое прочее? Почему древний СОМ-объектный обмен? А завтра попросят перейти на линукс и что, побежишь искать работу?
(4) Спасибо за ответ! Да, сейчас попробую в приемнике алгоритм выполнить , посмотрим что будет, отпишу сюда. У меня видимо уже глаз и мозг замылился, раз я этого еще не попробовала :) . По поводу 2го да, понимаю, у меня интерес как раз таки в том, а почему вообще он на 2 круг алгоритм запускает... я этого не делаю, и это какое то странное поведение, как по мне. А на ком выбор пал потому что это показалось относительно проще чем писать хттп и веб ( обработка разовая, потом не будет использоваться, хотелось все сделать в одном месте ).
(4) все норм на стороне приемника прошло, записала элемент с теми же значениями рекв-в, что пихаю через ком. В итоге и через ком теперь элемент записывается. Так уже было с одним из элементов, если я в приемнике подставляю нужные мне реквизиты, то он норм и в предприятии и программно пишет, а потом и в ком все ок( в общем прошло, но понимания чего мой ком летит так и нет пока :(
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот