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 позволяет указывать имя машины на которой будет стартовать сервер.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.