Пул соединений V81.COMConnector для ASP

Реализую взаимодействие нашей информационной системы с заводской программой, так называемой 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 найденным решением =)

Добавить комментарий