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