Реализую взаимодействие нашей информационной системы с заводской программой, так называемой
DMS-Backbone. Смысл состоит в написании механизма, который передавал бы
XML-сообщения от
DMS-Backbone серверу 1C:Предприятие и получал на них ответы. Сообщения эти
DMS-Backbone отправляет посредством
HTTP-протокола. Собственно, вся задача сводится к тому, чтобы заставить
веб-сервер получать эти сообщения и перенаправлять нашему серверу приложений.
Покопавшись в примере реализации интерфейса, предложенным заводом, можно было примерно понять, как это всё функционирует. Нужно просто заставить этот пример на определённом этапе вызывать нужные функции посредством COM-соединения, передавая им параметры, и получая ответы от нашей информационной системы. Сказано-сделано.
Добавил в примере вызов COM-соединения. Всё работает, данные передаются, обрабатываются сервером 1С:Предприятие и возвращаются. Но вот беда, установка соединения длится несколько секунд, то есть довольно тормознуто. Хотелось бы использовать одно соединение на всё время использования приложения. Что же делать?
Полез гуглить. Наткнулся на аналогичный вопрос на форуме SQL.RU. Там, к сожалению, нужного мне решения найти не удалось. Пытался хранить COM-соединение в сессии, но это оказалось ещё хуже: DMS-Backbone создаёт новую сессию при каждой отправке XML-сообщения и после нескольких нажатий кнопки F5 в браузере обнаруживаем кучу соединений на сервере 1С:Предприятие.
И вот сегодня, ковыряясь во встроенной справке 1С:Предприятия обнаружил замечательные свойства у V81.COMConnector: MaxConnections, PoolTimeout и PoolCapacity. Ура! То, что нужно!
В каталог с моими скриптами положил файлик global.asa со следующим содержимым:
<object runat="server" scope="application" id="objV81COMConnector" progid="V81.COMConnector"></object>
<script language="vbscript" runat="server">
sub Application_OnStart
objV81COMConnector.PoolCapacity = 2
objV81COMConnector.PoolTimeout = 60
objV81COMConnector.MaxConnections = 4
end sub
</script>
И теперь, во время соединения с сервером приложений 1С:Предприятие, производится поиск уже существующего, и новое устанавливается только если подходящее соединение не найдено.
Dim V81Connection
Dim V81ConnectionString
V81ConnectionString = "Srvr=""appservername"";Ref=""dbname"";Usr=""username"";Pwd=""userpassword"""
Set V81Connection = objV81COMConnector.Connect(V81ConnectionString)
Пойду похвастаюсь на SQL.ru найденным решением =)
спасибо за подсказки
жаль правда что на PHP аналогов global.asa
нет$this->v8COM
= new COM(v81.COMConnector) or wtError::wtDie(«Couldnt create the COM Component»,255);
$this->v8COM->PoolCapacity = 2;
$this->v8COM->PoolTimeout = 60;
$this->v8COM->MaxConnections = 4;
$this->v8 =
$this->v8COM->Connect(WT_1C8_CONNECT_STRING);в
моем случае пока никакого видимого выигрыша не дало
но я пока под нагрузкой из под IIS+php5fcgi это не тестировал
Привет, коллега! Ты, если я правильно уловил, трудишься на АвтоГанзе? А я с Диверса. Вот увидел знакомые буржуйские слова
«DMS-Backbone», решил зайти ;). На самом деле хотел тебя попросить, если возможно, скинь доки по этой вещи, а то начальство узнало про возможность интеграции, а не понимает, что без доков делать нечего. Буду очень признателен :)
Frost: Если у вас есть дистрибутив DMSBB, с ним в комплекте идет много документации в формате PDF. Дистрибутив DMSBB можно попробовать в представительстве получить.
А у вас не было проблемы с «висящим» подключением к 1с?
Когда после работы с
Com-объектом (после освобождения), соединение так и оставалось висеть? Есть ли там
какие-то способы принудительно закрыть соединение?
Работают под Asp.Net.
Frost: В нашем случае установка COM-соединения выполняется при старте Internet Information Server. Это соединение висит постоянно. Идея пула как раз и состоит в том, чтобы при подключении использовать уже установленное соединение.
А как вы выполняете BackUp для 1С, если есть подключенные пользователи?
Frost: Вообще-то, SQL позволяет делать резервные копии без отключения пользователей :)