trdm писал(а) 16. Мая 2007 :: 13:00:Господа, пора бы разьяснить "на пальцах" предназначение сего нововведения
Допустим, пишешь ты веб-приложение для выполнения каких-нибудь операций с базой 1С.
Код, выполняющийся на веб-сервере, создает объект v77.Application, вызывает метод Initialize, ждет пока 1С запустится (5-10 секунд), выполняет какие-нибудь действия, и уничтожает ссылку на v77.Application (1С при этом закрывается).
Время работы скрипта=<время открытия 1С> + <время выполнения нужных действий>.
Для веб-приложения отклик 5-10 секунд неприемлем.
Скрипты на веб-сервере теряют свое состояние после завершения работы.
В IIS (ASP) для сохранения каких-либо ресурсов между вызовами можно использовать объекты Application или Session.
Если v77.Application создавать в Application (или Session), 1С будет запускаться 1 раз при старте сервера (или сессии).
А теперь представь, что на твой веб-сервер ломится десяток клиентов.
Если храним ссылку на v77.Application в объекте Application, то не смогут выполняться одновременные запросы (один объект на всех).
Если в Session, то для каждой сессии будет создаваться свой v77.Application, что тоже не есть хорошо, т.к. большую часть времени они будут простаивать.
А теперь самое интересное...
организуем пул из объектов v77.Application (Допустим минимум 5 и максимум 10).
5 адинэсок запущены и ждут запросов. Скрипт на сервере запрашивает ссылку из пула, выполняет с ней необходимые действия и возвращает её обратно в пул. Получается, что в твоем веб-приложении могут выполняться
5 одновременных действий с базой. Т.е. в зависимости от интенсивности запросов твое приложение может обслуживать десяток или больше пользователей. Если готовых к использованию объектов в пуле нет и верхний лимит объектов в пуле еще не превышен, то сервер приложений создает новый объект и по окончании работы возвращает его в пул. Если пул заполнен, то сервер в течении некоторого времени ждет освобождения объектов в пуле и если не дождался, то возвращает ошибку.
Вся эта кухня называется "пулингом ресурсов". Собственно пул содержится сервисом COM+. Компонент v7AppServer.Connection просто контейнер для v77.Application и еще удовлетворяет условиям сервиса COM+ для объектов, которые "can be pooled".
Кроме веб-приложений есть еще разные задачи, где этот механизм применим.