gifts2017

Событийный обмен данными в распределенной ИБ.

Опубликовал Алексей Бочков (Aleksey.Bochkov) в раздел Обмен - Перенос данных из 1C8 в 1C8

В процессе разработки архитектуры распределенной базы данных 1С для Заказчика, появилось требование о событийном обмене данными между одним центром и многими филиалами по инициативе центра.
Задача осложнялась следующими требованиями:
1)     Нельзя использовать периодический опрос ресурсов (проверку появления файлов в каталоге).
2)     Нельзя использовать веб-сервисы на стороне филиалов, которые вызывались бы из центра.
3)     Настройка триггера не должна быть слишком сложной, и должна использовать минимум различных механизмов (для минимизации точек отказа).

Для решения этой задачи был реализован ftp-сервер, запускаемый в качестве сервиса Windows, который при получении файла производит запуск процедуры в 1С.

Схема работы:

1)       В центральной базе на сервере 1 происходит некое событие, инициирующее обмен с периферийно базой. Происходит выгрузка данных в файл и его передача по известному адресу на FTP-сервер.

2)       FTP-сервер получает файл и записывает его к локальный каталог.

3)       FTP-сервер через COM-соединение (имя класса "v82.COMConnector.1", соответственно, работает только для 8.2) вызывает в периферийной базе процедуру обмена данными.

4)       Периферийная база, получив сигнал, выполняет загрузку данных из файла.

 

Приложение состоит из одного исполняемого файла - FastExchangeNSI.exe (здесь и далее немного используются термины из выполняемого проекта).

Установка в качестве сервиса происходит с помощью команды:

FastExchangeNSI.exe /install

Удаление - FastExchangeNSI.exe /uninstall

После создания сервиса необходимо скорректировать файл настроек setting.ini (создается автоматически в каталоге программы):

1)     Указать строку соединения в формате «ConnectionString=Srvr="srv26:11641";Ref="nsi";Usr=Администратор;Pwd=» (если волнует вопрос безопасности, то данному пользователю можно дать права только на внешнее соединение).

2)     Указать порт для запуска службы «PortNumber=5888» (по-умолчанию, 21).

Далее необходимо включить сервис.

 

В процессе работы сервис пишет лог-файл вида:

24.10.2010-17:31:50 -> -------------------------------------------------------

24.10.2010-17:31:50 -> Запуск сервиса

24.10.2010-17:31:50 -> Чтение параметров из файла: E:\data\setting.ini

24.10.2010-17:31:50 -> Параметры из файла setting.ini:

24.10.2010-17:31:50 -> PathToProgram:E:\data\*

24.10.2010-17:31:50 -> ConnectionString:Srvr="srv26:11641";Ref="nsi";Usr=Администратор;Pwd=*

24.10.2010-17:31:50 -> PortNumber:5888*

24.10.2010-17:31:50 -> Включение FTP-сервера...

24.10.2010-17:31:50 -> FTP-сервер включен успешно.

24.10.2010-17:33:03 -> * * * * * * *

24.10.2010-17:33:03 -> Получен файл: /Message_Ц_Ф.xml

24.10.2010-17:33:03 -> Попытка оповещения 1С...

24.10.2010-17:33:08 -> Подключение к 1С выполнено успешно!

 

Вызываемая процедура 1С находится к модуле внешнего соединения, в которую передается также имя полученного файла:  Процедура StartExchange(Знач ИмяФайла) Экспорт

Для доступа к FTP-серверу необходимо указывать логин myuser, пароль mypass.

 

Во вложении приведен сам исполняемый файл и выгрузка конфигурации с примером.

 

Целью данной публикации является получение адекватной оценки жизнеспособности идеи, а также ценных замечаний и дополнений.

Скачать файлы

Наименование Файл Версия Размер
Исполняемое приложение 140
.exe 221,50Kb
25.10.10
140
.exe 221,50Kb Скачать
Пример конфигурации 47
.dt 9,17Kb
25.10.10
47
.dt 9,17Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. mirco brons (mirco) 25.10.10 16:32
Э-э-э, немного не понял: "Нельзя использовать периодический опрос ресурсов" - "который при получении файла производит запуск процедуры в 1С". Разве это не нарушение ваших же условий...
2. albochkov (Aleksey.Bochkov) 26.10.10 11:16
(1) "периодический опрос ресурсов" - это когда система, например, каждые 10 минут проверяет каталог на наличие в нем новых файлов, а находит не всегда. В итоге большой процент проверок оказывается бесполезной нагрузкой на систему.
"при получении файла производит запуск процедуры в 1С" - файл получен, процедура обмена в 1С запущена. Никаких бесполезных обработок, никакой задержки.
Никаких нарушений логики не вижу.
3. VVV (V_V_V) 26.10.10 15:25
"выполняет загрузку", "файл получен" - а выгрузить/отправить Ваша прога умеет?
4. albochkov (Aleksey.Bochkov) 26.10.10 15:52
(3) А зачем? Это и сама 1С прекрасно умеет.
5. Трактор Трактор (Трактор) 29.10.10 09:26
Бесполезное усложнение процесса. Ежеминутная проверка наличия файла не нагрузит даже самую слабую систему.
6. albochkov (Aleksey.Bochkov) 29.10.10 10:56
(5) Ну да.. особенно когда у тебя >100 филиалов, и каждый каждую минуту лезет на центральный ftp-сервер для проверки наличия файла.
7. Трактор Трактор (Трактор) 29.10.10 11:34
(6) Напугал ежа голым задом. Я сопровождал большие базы.
ftp прекрасно заточен под большое количество клиентов. Сто запросов в минуту переживёт. Тем более что 99 из них получат отлуп из-за отсутствия файла.
8. albochkov (Aleksey.Bochkov) 29.10.10 17:50
(7) Спорить можно долго. Сугубо ИМХО - оборудование не должно выполнять бесполезную работу.
9. Energen Energen (Energen) 26.11.11 11:28
Почему-то не разобрался...
10. Дмитрий Шпаковский (Godman) 30.11.11 12:24
А по-моему отличная идея, поскольку любой периодический опрос подвешивает систему на несколько секунд, особенно если обращаться по сети и с хилым каналом.
11. John Smith (PiccaHut001) 25.12.12 19:35
Очередное изобретение велосипеда. Неадекватный заказчик захотел странного, программист 1с прогнулся и написал свой ftp-сервер!!! "оборудование не должно выполнять бесполезную работу" - завтра заказчик не захочет платить за терминальный сервер, albochkov, возьмётесь за написание.

"любой периодический опрос подвешивает систему на несколько секунд, особенно если обращаться по сети и с хилым каналом" -феерично, что у Вас за система, 486 проц с 16 мб оперативы уже нормально работал с сетью, сделайте апгрейд наконец-то.