progmike
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Господа, добрый день! Нуждаюсь в совете... На данный момент имеем следующее: 1. Центральная база 1С на сервере + SQL 2. Филиалы 1С на сервере + SQL 3. Конвертация данных + типовая обработка Универсальный обмен данными XML ЦБ и Филиал находятся друг от друга за сетями WAN. Доступ к единому файловому ресурсу - через VPN соединение (которое постоянно установлено и контролируется сетевым оборудованием) Средняя задержка сети ~25-40 мс на скорости 15 МБит/сек. Такая сеть позволяет файлу выгрузки (не более 50КБ) летать почти моментально и, в целом, быстродействие на достаточном уровне. В базах 1С созданы узлы обмена с регистрацией требуемых объектов и регламентное задание. По расписанию стартует процедура, которая: 1. создает типовую обработку (Универсальный обмен данными XML) 2. подсовывает параметры (путь к файлу правил конвертации, путь к файлу обмена, имя узла выгрузки и т.д.) 3. выгружает данные во временный файл (локально) 4. Копирует полученный XML-файлик на сетевой ресурс На ответной стороне: 1. создает типовую обработку (Универсальный обмен данными XML) 2. копирует сетевой файл во временную папку 3. подсовывает параметры (путь к временному файлу выгрузки) 4. загружает данные Есть проблема: Если в момент копирования файла выгрузки (туда или обратно) возникает сбой связи - наглухо подвисает целиком фоновый процесс. Причем, подвисает так, что рестарт сервера 1С не освобождает занятые файлы... Копирование происходит так: Код: ФайлПротоколаДанных = Новый ЗаписьТекста(ПолноеИмяФайлаПротоколаОбмена, КодировкаТекста.ANSI, , Истина); Попытка КопироватьФайл(КаталогИсточник + "\" + ФайлДанныхИмя, КаталогПриемник + "\" + ИмяДляФилиала1); Исключение ЗаписьЖурналаРегистрации("Обмен данными", УровеньЖурналаРегистрации.Информация,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ФайлПротоколаДанных.ЗаписатьСтроку("" + ТекущаяДата() + " " +СтрокаСообщения); КонецПопытки; ФайлПротоколаДанных.Закрыть(); | Так вот, если произошёл обрыв связи, фоновое задание зависает на команде КопироватьФайл(). Наглухо. Записи в журнале регистрации нет. ФайлПротоколаДанных занят монопольно. Если снять процесс dllhost, который "рулил" данным фоновым заданием, тогда ФайлПротоколаДанных остается занятым (т.е. его нельзя открыть в блокноте, скопировать или удалить). В итоге всех мучений был выявлен единственный способ привести все в норму: рестарт ОС. Есть мысль использовать ту же обработку "Универсальный обмен данными XML", только метод выгрузки изменить на COM-соединение. Такой обмен в данный момент исправно работает между двумя базами на одном сервере (бух-упр). Ваше мнение, господа? Будут ли вылазить подводные камни при использовании COM-соединения через VPN(WAN) подключение? |