Конференция "Corba" » Служба в качестве сервера автоматизации [Delphi, Windows]
 
  • eugenex (25.06.06 18:16) [0]
    Господа коллеги! Ситуация следующая: имеется распределенная система в виде набора DCOM-компонентов, работающих как inproc-сервера (dll-ки), необходимо заставить все эти сервера работать как самостоятельные процессы в виде нескольких виндовых служб. Создаем сервис, внутрь него помещаем соответствующий automation object, все прекрасно компилируется, инсталлится и запускается. НО. При обращении удаленного клиента к необходимому ему компоненту (в момент запроса им линка на интерфейс), на серваке создается дополнительный автономный процесс в виде эксешника, выполняющего роль собственно службы. (до получения линка на интерфейс таскменеджер отображает один service.exe (собственно наш сервис), после получения - дополнительный экземпляр service.exe). С одной стороны, ситуация логична: CoGetClassObject() просто запускает новый серверный процесс, понятия не имея о том, что данный процесс у нас уже бегает под службой. Вопрос: как научить фабрику объектов обращаться к работающей службе за необходимым клиенту интерфейсом?
  • Ломброзо © (26.06.06 11:27) [1]
    eugenex   (25.06.06 18:16)
    1) Посмотреть в сторону моникёров и IRunningObjectTable
    2) Установить компоненты в COM+ и поставить галку "Запустить  как службу NT"
  • eugenex (26.06.06 17:08) [2]
    1) пасиба за подброшенную идею, пороемся, мейби что и найдем
    2) ком+ давно и с радостью бы воспользовались (и пользуемся в других пражектах), но здесь требования со стороны заказчика такие - реализовать систему исключительно на дком :(
  • Ломброзо © (26.06.06 17:46) [3]
    В принципе можно и фабрику классов переписать, правда не знаю, как это в Delphi делается, но там всего лишь нужно имплементировать IClassFactory и реализовать метод CreateInstance, но мне кажется, что это не очень красивое решение, поскольку нестандартное.
  • eugenex (26.06.06 19:09) [4]
    Ага... с самого начала такая именно мысль и была. в дельфях нормально можно самому фабрику переписать, но, опять же, головоломно и некрасиво, поскольку там если фабрику переопределять, то придется сервис на апи-функциях строить (что еще с полтыщенки строк кода :). по умолчанию делфи предоставляет классы TService и TAutoObject, которые уже и точку входа для отлавливания системных сообщений инкапсулируют, и комовскую фабрику. Но в принципе если ничего другого не останется, то будем своими руками все дженерик-методы переписывать. А Вы на АТЛ наверное пишете?
  • isasa © (26.06.06 22:34) [5]
    ... имеется распределенная система в виде набора DCOM-компонентов, работающих как inproc-сервера (dll-ки), необходимо заставить все эти сервера работать как самостоятельные процессы в виде нескольких виндовых служб.

    Эта штука(выделенная жирным), не имеет (!) своего адресного пространства.
    Или перекомпилировать DCOM-ы как exe,
    или ищи в MSDN
    Surrogate Sharing
    Registering the DLL Server for Surrogate Activation
    .

    Я вяло почитал справку по Surrogate, и компильнул, как exe.
    Может тебе повезет больше.
  • eugenex (27.06.06 09:25) [6]
    всмысле? понятное дело что инпроки своего адресного пространства не имеют и выполняются в контексте клиента. но при создании службы ком-объекты автоматически помечаются как внешние сервера. то есть длл в данном случае вообще не используются - они службой не подгружаются, но сама служба у нас выступает как AutoObject. оно и логично, что фабрика создает новый процесс при попытке активации удаленного объекта, - вопрос в том как заставить ее обращаться для этого к службе. похоже, что единственное решение здесь - переопределить КреэйтИнстанс.
  • Медвед (27.06.06 10:34) [7]
    >поскольку там если фабрику переопределять, то придется сервис на апи-функциях строить (что еще с полтыщенки строк кода :)
    что за бред
  • м (25.06.08 21:35) [8]
    м
  • Сергей М. © (26.06.08 10:44) [9]
  • Netaarentee (31.10.08 06:28) [10]
    Собираем по сети интернет базы данных потенциальных клиентов
    для всех видов Бизнеса - все контактные данные!
    Индивидуально! Много! Быстро! Из первых рук!
    В базах только те, кто скорее всего и больше всего
    может приобрести Ваших товаров и услуг!
    Базы пригодны для массового извещения Ваших потенциальных клиентов
    о наличии у вас товаров и услуг любым удобным для Вас способом!
    Безлимитная поддержка и обновление баз данных!
    Более подробно Вы можете узнать
    по телефону +79133913837
    ICQ: 6288862
    Email: rassilka.agent@gmail.com
    Skype: prodawez
    С Уважением к Вам и Вашему Бизнесу
    Евгений
    "Базы данных потенциальных клиентов для Вашего Бизнеса"
 
Конференция "Corba" » Служба в качестве сервера автоматизации [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0][p:0]