DCOM от А до Я
От: Egor  
Дата: 31.01.02 00:27
Оценка:
Здравствуйте господа !
У меня вот такой вопрос. Есть DCOM сервер и есть клиент.
Может ли кто-нибудь рассказать или сказать где можно почитать подробно о том,
как провести установку приложений, с использованием DCOM, от начала и до конца.
Т.е. на удаленной машине нужно поставить сервер и потом к нему коннектиться с клиента.
1. Порядок установки сервера. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
2. Настройка клиента. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
Буду ОЧЕНЬ признателен за ответ.
Заранее спасибо.
Re: DCOM от А до Я
От: IT Россия linq2db.com
Дата: 31.01.02 01:56
Оценка:
Здравствуйте Egor, Вы писали:

E>У меня вот такой вопрос. Есть DCOM сервер и есть клиент.

E>Может ли кто-нибудь рассказать или сказать где можно почитать подробно о том, как провести установку приложений, с использованием DCOM, от начала и до конца.

Тут одной установкой не обойдёшься, надо будет ещё и в коде пошаманить.

E>Т.е. на удаленной машине нужно поставить сервер и потом к нему коннектиться с клиента.

E> 1. Порядок установки сервера. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E> 2. Настройка клиента. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E>Буду ОЧЕНЬ признателен за ответ.

Вот откапал свой ответ на iXBT:

  1. Устанавливаем одинаковые настройки безопасности на клиенте и сервере, где-нибудь сразу после CoInitialize(Ex):

    ::CoInitializeSecurity(
        0, -1, 0, 0,
        RPC_C_AUTHN_LEVEL_CONNECT,
        RPC_C_IMP_LEVEL_IDENTIFY,
        0, 0, 0 );


  2. Регестрируем объект на обоих машинах

  3. Идём в dcomcnfg на сервере.
    На вкладке Identity выставляем под каким аккаунтом будет работать сервер:
    The interactive user — под аккаунтом того, кто в данный момент топчит клаву (не работает, если никто не залогинился).
    The launching user — под аккаунтом того, кто этот объект запустил (не удобно, если надо чтобы с одним объектом работали все пользователи).
    This user — создаешь юзера — Mister Object, даёшь ему необходимые права и вперёд.
    Дальше вкладка Security:
    Use custom access permition — задаёшь тех, кто может работать с объектом.
    Use custom launch permition — кто имеет право создавать объект.

  4. Вызов сервера с клиента.

    BSTR servnm = L"AppServer";
    COSERVERINFO csi = { 0, servnm, 0, 0 };
    MULTI_QI mqi = { &__uuidof(IMyInterface), 0, 0 };
    HRESULT hr =
        CoCreateInstanceEx(__uuidof(MyInterface),0,CLSCTX_REMOTE_SERVER,&csi,1,&mqi);
    if (FAILED(hr)) {
        return 0;
    }
    
    ... mqi.pItf; ... // здесь указатель на IUnknownm
    qi.pItf->Release();


    servnm позволяет указывать имя машины на которой будет стартовать сервер.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: DCOM от А до Я
От: George_Seryakov Россия  
Дата: 31.01.02 03:35
Оценка:
Здравствуйте IT, Вы писали:

E>>У меня вот такой вопрос. Есть DCOM сервер и есть клиент.

E>>Может ли кто-нибудь рассказать или сказать где можно почитать подробно о том, как провести установку приложений, с использованием DCOM, от начала и до конца.

IT>Тут одной установкой не обойдёшься, надо будет ещё и в коде пошаманить.


Не пугай человека безопасностью. Может, он regsvr32 в лицо не знает.

E>>Т.е. на удаленной машине нужно поставить сервер и потом к нему коннектиться с клиента.

E>> 1. Порядок установки сервера. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E>> 2. Настройка клиента. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E>>Буду ОЧЕНЬ признателен за ответ.

IT>Вот откапал свой ответ на iXBT:


IT>
  • Устанавливаем одинаковые настройки безопасности на клиенте и сервере, где-нибудь сразу после CoInitialize(Ex):

    Я расскажу что делать до проблем с безопасностью (все бегает под одним доменным аккаунтом с администраторскими правами, например).

    IT>
  • Регестрируем объект на обоих машинах

    Регистируем компонент на сервере. С помощью regsvr32 (см. "Register COM Server") или "<appname> -server". Проверяем, что его можно инстанциировать (с помощью oleview, напрмер).

    Устанавливаем клиента на сервере. Проверяем, что клиент работает с сервером.

    Регистирируем серверный компонент на клиенте. Идём в dcomcnfg на клиенте. Находим в списке Applicatins сервер-компонет. На вкладке Location ставим, что компонент будует исполняться на сервере (имя сервера), а не на клиентской машине. Проверяем, что серверный объект может быть инстанциирован на сервер с клиентской машины с помощью oleview.

    И только потом ставим клиента на клиентской машине и пытаемся работать с сервером.

    Если ратотает — повезло. Нет — нужно разбираться с безопасностью.

    IT>
  • Идём в dcomcnfg на сервере.
    IT>На вкладке Identity выставляем под каким аккаунтом будет работать сервер:
    IT>The interactive user — под аккаунтом того, кто в данный момент топчит клаву (не работает, если никто не залогинился).
    IT>The launching user — под аккаунтом того, кто этот объект запустил (не удобно, если надо чтобы с одним объектом работали все пользователи).
    IT>This user — создаешь юзера — Mister Object, даёшь ему необходимые права и вперёд.
    IT>Дальше вкладка Security:
    IT>Use custom access permition — задаёшь тех, кто может работать с объектом.
    IT>Use custom launch permition — кто имеет право создавать объект.
  • GS
    Re[3]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 03:42
    Оценка:
    Здравствуйте George_Seryakov, Вы писали:

    GS> Регистирируем серверный компонент на клиенте. Идём в dcomcnfg на клиенте. Находим в списке Applicatins сервер-компонет. На вкладке Location ставим, что компонент будует исполняться на сервере (имя сервера), а не на клиентской машине. Проверяем, что серверный объект может быть инстанциирован на сервер с клиентской машины с помощью oleview.


    Вот не люблю я этот способ. Не люблю и всё, а почему не знаю
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[4]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 04:00
    Оценка:
    Здравствуйте IT, Вы писали:

    IT>Здравствуйте George_Seryakov, Вы писали:


    GS>> Регистирируем серверный компонент на клиенте. Идём в dcomcnfg на клиенте. Находим в списке Applicatins сервер-компонет. На вкладке Location ставим, что компонент будует исполняться на сервере (имя сервера), а не на клиентской машине. Проверяем, что серверный объект может быть инстанциирован на сервер с клиентской машины с помощью oleview.


    IT>Вот не люблю я этот способ. Не люблю и всё, а почему не знаю


    Ну тогда
    set o = CreateObject("<ProgId>")
    msgbox o.<method> <parameters>


    Или в dcomcnfg|Applications|Location ходить не любишь? А как же role-based security? Тоже все через код будешь настраивать?

    Интересно, бывают ли прсихоаналитики для программеров?
    GS
    Re[5]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 04:09
    Оценка:
    Здравствуйте George_Seryakov, Вы писали:

    IT>>Вот не люблю я этот способ. Не люблю и всё, а почему не знаю


    Вспомнил почему не люблю. Это надо настраивать на каждом клиенте.

    GS>Или в dcomcnfg|Applications|Location ходить не любишь? А как же role-based security? Тоже все через код будешь настраивать?


    GS>Интересно, бывают ли прсихоаналитики для программеров?


    Да, бывают. Админы, которым надо будет обходить пару сотен рабочих станций и запускать на каждой этот самый dcomcnfg. Обычно это заканчивается продолжительным взглядом глаза в глаза и недвусмысленным покручиванием пальцем у виска.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[5]: DCOM от А до Я
    От: Egor  
    Дата: 31.01.02 04:17
    Оценка:
    Мда...
    Как обычно ударились в выяснения того, кто кого круче,
    кто как любит.

    RegSvr32 я знаю / начальник рассказывал /

    А что значит "Проверяем, что его можно инстанциировать (с помощью oleview, напрмер)."
    Что надо сделать, ну скачал я oleview. Там набор сишных исходников. И что ? Еше и компилировать надо. Ну совсем дурдом.
    Re[6]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 04:23
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>Мда...

    E>Как обычно ударились в выяснения того, кто кого круче, кто как любит.

    Бывает, извини

    E>RegSvr32 я знаю / начальник рассказывал /


    Мудрый человек.

    E>А что значит "Проверяем, что его можно инстанциировать (с помощью oleview, напрмер)."


    Это к GS.

    E>Что надо сделать, ну скачал я oleview. Там набор сишных исходников. И что ? Еше и компилировать надо. Ну совсем дурдом.


    Ну, компилировать его совсем не обязательно, достаточно в студии зайти в Menu->Tools и запустить OLE/COM Object Viewer.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[6]: DCOM от А до Я
    От: Egor  
    Дата: 31.01.02 04:23
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>Мда...

    E>Как обычно ударились в выяснения того, кто кого круче,
    E>кто как любит.

    E>RegSvr32 я знаю / начальник рассказывал /


    E>А что значит "Проверяем, что его можно инстанциировать (с помощью oleview, напрмер)."

    E>Что надо сделать, ну скачал я oleview. Там набор сишных исходников. И что ? Еше и компилировать надо. Ну совсем дурдом.

    Да. еше.
    Все это я пытаюсь сделать средствами Дельфи.
    Re[6]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 04:25
    Оценка:
    Здравствуйте IT, Вы писали:

    IT>Здравствуйте George_Seryakov, Вы писали:


    IT>>>Вот не люблю я этот способ. Не люблю и всё, а почему не знаю


    IT>Вспомнил почему не люблю. Это надо настраивать на каждом клиенте.


    Не, надо на каждом клиенте installshield запускать. Вот он пусть все это настраивает.

    GS>>Интересно, бывают ли прсихоаналитики для программеров?


    IT>Да, бывают. Админы, которым надо будет обходить пару сотен рабочих станций и запускать на каждой этот самый dcomcnfg. Обычно это заканчивается продолжительным взглядом глаза в глаза и недвусмысленным покручиванием пальцем у виска.


    Программу написать. Скриптец — на случай настройки location. Если админ такого не умеет — пусть ходит.

    Не принимается.
    GS
    Re[7]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 04:31
    Оценка:
    Здравствуйте George_Seryakov, Вы писали:

    IT>>Да, бывают. Админы, которым надо будет обходить пару сотен рабочих станций и запускать на каждой этот самый dcomcnfg. Обычно это заканчивается продолжительным взглядом глаза в глаза и недвусмысленным покручиванием пальцем у виска.


    GS>Программу написать. Скриптец — на случай настройки location. Если админ такого не умеет — пусть ходит.


    GS>Не принимается.


    Мда... не видел ты моего админа... Будешь в FL — заходи, покажу.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[6]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 04:41
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>Мда...

    E>Как обычно ударились в выяснения того, кто кого круче,
    E>кто как любит.

    E>RegSvr32 я знаю / начальник рассказывал /


    Так, может, пусть он DCOM и настраивает?

    E>А что значит "Проверяем, что его можно инстанциировать (с помощью oleview, напрмер)."

    E>Что надо сделать, ну скачал я oleview. Там набор сишных исходников. И что ? Еше и компилировать надо. Ну совсем дурдом.

    Не, компилировать не надо. Это уже откомпилированная тулза. Oleview входит в состав Visual Studio и NT Option Pack 4.
    См "Using the OLE/COM Object Viewer". Если мышкой кликнуть на к-нить объект, то потом можно через меню Object|Create Instance его скриэйтить. Там еще и Location посмотреть/изменить можно. Учи матчасть, короче. Тебе еще с безопасностью разбираться.
    GS
    Re[7]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 04:54
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>Здравствуйте Egor, Вы писали:


    E>>Мда...

    E>>Как обычно ударились в выяснения того, кто кого круче,
    E>>кто как любит.

    E>>RegSvr32 я знаю / начальник рассказывал /


    E>>А что значит "Проверяем, что его можно инстанциировать (с помощью oleview, напрмер)."

    E>>Что надо сделать, ну скачал я oleview. Там набор сишных исходников. И что ? Еше и компилировать надо. Ну совсем дурдом.

    E>Да. еше.

    E>Все это я пытаюсь сделать средствами Дельфи.

    Настройки DCOM делаются без программирования. Oleview возьми с какого-нибудь компьютера, где есть Visual Studio.
    GS
    Re[8]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 04:58
    Оценка:
    Здравствуйте George_Seryakov, Вы писали:

    GS>Настройки DCOM делаются без программирования.


    До тех пор пока у клиента есть права администратора.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[7]: DCOM от А до Я
    От: Egor  
    Дата: 31.01.02 05:41
    Оценка:
    Ребята, вы еще тут?

    Вообщем я настроил эту штуку (кажется)

    Прописал юзера на серваке.
    Запустил dcomcnfg, установил там все security.
    Теперь у меня компонент DCOMConnection коннектится.
    А вот ClientDataSet при попытке установить свойство Active = true
    выдает Error loading type library/DLL

    Что это может быть ?
    Re[8]: DCOM от А до Я
    От: IT Россия linq2db.com
    Дата: 31.01.02 05:52
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>А вот ClientDataSet при попытке установить свойство Active = true выдает Error loading type library/DLL


    E>Что это может быть ?


    А ты удалённый компонент (тот который должен стартовать на сервере) на клиентской машине зарегистрировал?
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[9]: DCOM от А до Я
    От: Egor  
    Дата: 31.01.02 06:09
    Оценка:
    Здравствуйте IT, Вы писали:

    IT>Здравствуйте Egor, Вы писали:


    E>>А вот ClientDataSet при попытке установить свойство Active = true выдает Error loading type library/DLL


    E>>Что это может быть ?


    IT>А ты удалённый компонент (тот который должен стартовать на сервере) на клиентской машине зарегистрировал?


    Конечно, запускаю dcomcnfg и вижу его в списке. Затем его же и конфигурирую, т.е. указываю ему стартовать на таком-то сервере.
    А на сервере ему указываю стартовать локально.
    Сервер у меня сделан в виже .exe файла. Но я думаю это роли не играет, хоть это .ехе или dll.
    Re[8]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 14:58
    Оценка:
    Здравствуйте IT, Вы писали:

    GS>>Программу написать. Скриптец — на случай настройки location. Если админ такого не умеет — пусть ходит.


    GS>>Не принимается.


    IT>Мда... не видел ты моего админа... Будешь в FL — заходи, покажу.


    А что такое? Неуставные отношения?
    GS
    Re[9]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 15:34
    Оценка:
    Здравствуйте IT, Вы писали:

    IT>Здравствуйте George_Seryakov, Вы писали:


    GS>>Настройки DCOM делаются без программирования.


    IT>До тех пор пока у клиента есть права администратора.


    Это так. Но если мы хотим иметь фашистское администрирование, то админу придется побегать. Конечно, можно обойти непрописанные в реджистри настройки дикома захардкоживая их в исходные тексты, но
    не дело это. Вот у меня с пяток разных серверных инсталляций (на разных стадиях тестирования/интеграции), в разных местах США. И что, мне пять разных кодов собирать?
    GS
    Re[8]: DCOM от А до Я
    От: George_Seryakov Россия  
    Дата: 31.01.02 15:45
    Оценка:
    Здравствуйте Egor, Вы писали:

    E>Ребята, вы еще тут?


    E>Вообщем я настроил эту штуку (кажется)


    E>Прописал юзера на серваке.

    E>Запустил dcomcnfg, установил там все security.
    E>Теперь у меня компонент DCOMConnection коннектится.
    E>А вот ClientDataSet при попытке установить свойство Active = true
    E>выдает Error loading type library/DLL

    E>Что это может быть ?


    Все претензии разработчикам ClientDataSet.

    Попробуй выснить какую библиотеку он не может загрузить. Воспользуйся RegMon с SysInternals.com. Сравни библиотеку и ее регистрацию на сервере и клиенте.
    GS
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.