Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как сделать семафор (разделяемая блокировка)

Как сделать семафор (разделяемая блокировка)
Я
   Tateossian
 
30.05.18 - 10:14
Всем привет! Реализован обмен с другой базой 1С с помощью веб-сервиса и универсального обмена данных (через правила конвертации). Обмен идет в текущем режиме через обработчик ожидания глобальный. И валится на блокировке вот в этот месте:

    // Создаем новое сообщение

    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
        
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена); <== тут

У меня вопрос: т.о., СоздатьЗаписьСообщения - это функция менеджер ВСЕХ планов обмена, получается, это синглтон, существующий в единственном экземпляре? Ок. Как заставить писать сообщения всех вызовов, предположим, очередью?
 
 
   Tateossian
 
1 - 30.05.18 - 10:27
Текст ошибки такой:  «Ошибка блокировки объекта. Объект уже заблокирован». И справочная информация на юзера, сеанс и прочее.
   Tateossian
 
2 - 30.05.18 - 10:31
А никто не пробовал обмен делать что-то вроде ПотокВПамяти создать и передать буфер в приемника - com-объекта? Псевдо shared memory в 1С)
   finik
 
3 - 30.05.18 - 10:37
Сделать регистр сведений с временем добавления и узлами? И последовательно в порядке добавления обрабатывать его по каждому узлу?
   Tateossian
 
4 - 30.05.18 - 10:38
(3) Зачем, если уже есть таблица изменений плана обмена?
   finik
 
5 - 30.05.18 - 10:47
Если правильно понял, нужно упорядочить вызовы методов ЗаписьСообщения так, чтобы они не пересекались. РС - для упорядочения этих вызовов. В нем признак с актуально обрабатываемой записью.
   Wingless
 
6 - 30.05.18 - 10:54
(0) Блокируется узел плана обмена.

>Как заставить писать сообщения всех вызовов, предположим, очередью?

Не обрабатывать один узел в разных сеансах.
   Tateossian
 
7 - 30.05.18 - 10:56
(6) Логично. Но, 1) как разнести узлы по сеансам? 2) если узел - один?
   Wingless
 
8 - 30.05.18 - 11:06
1 регламентное задание на 1 узел, очевидно.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует