-
Господа коллеги! Ситуация следующая: имеется распределенная система в виде набора DCOM-компонентов, работающих как inproc-сервера (dll-ки), необходимо заставить все эти сервера работать как самостоятельные процессы в виде нескольких виндовых служб. Создаем сервис, внутрь него помещаем соответствующий automation object, все прекрасно компилируется, инсталлится и запускается. НО. При обращении удаленного клиента к необходимому ему компоненту (в момент запроса им линка на интерфейс), на серваке создается дополнительный автономный процесс в виде эксешника, выполняющего роль собственно службы. (до получения линка на интерфейс таскменеджер отображает один service.exe (собственно наш сервис), после получения - дополнительный экземпляр service.exe). С одной стороны, ситуация логична: CoGetClassObject() просто запускает новый серверный процесс, понятия не имея о том, что данный процесс у нас уже бегает под службой. Вопрос: как научить фабрику объектов обращаться к работающей службе за необходимым клиенту интерфейсом?
-
eugenex (25.06.06 18:16) 1) Посмотреть в сторону моникёров и IRunningObjectTable 2) Установить компоненты в COM+ и поставить галку "Запустить как службу NT"
-
1) пасиба за подброшенную идею, пороемся, мейби что и найдем 2) ком+ давно и с радостью бы воспользовались (и пользуемся в других пражектах), но здесь требования со стороны заказчика такие - реализовать систему исключительно на дком :(
-
В принципе можно и фабрику классов переписать, правда не знаю, как это в Delphi делается, но там всего лишь нужно имплементировать IClassFactory и реализовать метод CreateInstance, но мне кажется, что это не очень красивое решение, поскольку нестандартное.
-
Ага... с самого начала такая именно мысль и была. в дельфях нормально можно самому фабрику переписать, но, опять же, головоломно и некрасиво, поскольку там если фабрику переопределять, то придется сервис на апи-функциях строить (что еще с полтыщенки строк кода :). по умолчанию делфи предоставляет классы TService и TAutoObject, которые уже и точку входа для отлавливания системных сообщений инкапсулируют, и комовскую фабрику. Но в принципе если ничего другого не останется, то будем своими руками все дженерик-методы переписывать. А Вы на АТЛ наверное пишете?
-
... имеется распределенная система в виде набора DCOM-компонентов, работающих как inproc-сервера (dll-ки), необходимо заставить все эти сервера работать как самостоятельные процессы в виде нескольких виндовых служб.
Эта штука(выделенная жирным), не имеет (!) своего адресного пространства. Или перекомпилировать DCOM-ы как exe, или ищи в MSDN Surrogate Sharing Registering the DLL Server for Surrogate Activation .
Я вяло почитал справку по Surrogate, и компильнул, как exe. Может тебе повезет больше.
-
всмысле? понятное дело что инпроки своего адресного пространства не имеют и выполняются в контексте клиента. но при создании службы ком-объекты автоматически помечаются как внешние сервера. то есть длл в данном случае вообще не используются - они службой не подгружаются, но сама служба у нас выступает как AutoObject. оно и логично, что фабрика создает новый процесс при попытке активации удаленного объекта, - вопрос в том как заставить ее обращаться для этого к службе. похоже, что единственное решение здесь - переопределить КреэйтИнстанс.
-
>поскольку там если фабрику переопределять, то придется сервис на апи-функциях строить (что еще с полтыщенки строк кода :) что за бред
-
м
-
-
Собираем по сети интернет базы данных потенциальных клиентов для всех видов Бизнеса - все контактные данные! Индивидуально! Много! Быстро! Из первых рук! В базах только те, кто скорее всего и больше всего может приобрести Ваших товаров и услуг! Базы пригодны для массового извещения Ваших потенциальных клиентов о наличии у вас товаров и услуг любым удобным для Вас способом! Безлимитная поддержка и обновление баз данных! Более подробно Вы можете узнать по телефону +79133913837 ICQ: 6288862 Email: rassilka.agent@gmail.com Skype: prodawez С Уважением к Вам и Вашему Бизнесу Евгений "Базы данных потенциальных клиентов для Вашего Бизнеса"
|