Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > Разница подъема клиента просто и через DCOM


Автор: gAlexKo 7.9.2020, 13:49
Сорри - тема должна называться "Разница подъема сервера просто и через DCOM". Просьба исправить название, если можно.



Разработан OPC сервер получающий и раздающий некие данные.

Есть два компа в сети LAN.
1-й комп - на нем программа BASE, которая реально принимает данные. OPC сервер берет данные этой программы и выдает их OPC клиентам по запросу. 

2-й комп - нем запускается OPC клиент который вызывает (через DCOM) подъем сервера на компе1 и отображает данные программы BASE.


Если запустить два (и более) клиента на компе1 (там где сервер), то при запуске 1-го клиента сервер поднимается и далее один экземпляр сервера обслуживает всех клиентов.

Если запустить первый клиент на компе1, а другой клиент на компе2 (через DCOM запускается сервер на компе1), то на компе1 поднимаются два экземпляра сервера (что вызывает некоторые проблемы с инициализацией этих серверов). 

Вопрос - этот двойной запуск неизбежен или можно как-то заставить DCOM клиента работать с тем первым экземпляром который уже поднят на компе1?

Автор: xvr 7.9.2020, 18:29
Посмотрите под какими акаунтами работают ваши 2 экземпляра.
Так же посмотрите как именно они запустились - как exe сервера или сервисы.
Если есть различия по любому из этих пунктов - постарайтесь их привести к общему знаменателю.
(В частности - точно ли клиенты на компе 1 запускают сервер через DCOM, а не локально?)

Автор: gAlexKo 8.9.2020, 11:35
 xvr> Посмотрите под какими акаунтами работают
 xvr> ваши 2 экземпляра.

Тот сервер который запущен клиентом(ами) компа1 запускается текущим пользователем компа1.

Тот сервер который запускается через DCOM клиентом компа2 запускается от имени пользователя компа2 (который заведен в пользователи компа1). Но если запустить комп2 от имени пользователя компа1, то все равно запуск сервера через DCOM вызывает на компе1 подъем второго экземпляра.

 xvr> Так же посмотрите как именно они
 xvr> запустились - как exe сервера или сервисы.

Как сервера (т.е. /regserver) , я не делаю их как сервисы.

 xvr> Если есть различия по любому из этих
 xvr> пунктов - постарайтесь их привести к общему
 xvr> знаменателю. (В частности - точно ли клиенты
 xvr> на компе 1 запускают сервер через DCOM, а не
 xvr> локально?)

Вообще мои клиенты обоих компов при вызове сервера используют IP адрес компа1. 
Если использовать в качестве клиента Matricon Explorer, то он показывает статус сервера в на компе2 как "Connected remotely on \\комп1". В то время как статус второго экземпляра на компе1 (запущенного на компе1) "Connected locally".

А как запустить через DCOM сервер на компе1? Ведь по идее COM/DCOM это одна система, просто вызов DCOM идет через сеть?

Автор: xvr 10.9.2020, 14:34
Цитата(gAlexKo @  8.9.2020,  11:35 Найти цитируемый пост)
Тот сервер который запускается через DCOM клиентом компа2 запускается от имени пользователя компа2 (который заведен в пользователи компа1).

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

Цитата

Но если запустить комп2 от имени пользователя компа1,

Пользователь должен быть вообще один, для разных компов это возможно если только он доменный (одинаковое имя пользователя на локальных компах недостаточно)

Попробуйте запустить сервер под системным акаунтом (localsystem например)


Цитата(gAlexKo @  8.9.2020,  11:35 Найти цитируемый пост)
В то время как статус второго экземпляра на компе1 (запущенного на компе1) "Connected locally".

Вот вот.


Цитата(gAlexKo @  8.9.2020,  11:35 Найти цитируемый пост)
А как запустить через DCOM сервер на компе1?


Попробуйте в CoCreateInstanceEx явно задать удалённое подключение, а в качестве хоста задать .


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)