DCOM вызов из net
От: _Cancel Беларусь  
Дата: 22.01.09 16:07
Оценка:
Проблема загадочного характера.
COM сервер реализованный как DLL (С++) регистрируется на cервере. Для проверки пробую OleView->CreateInstance создаю его удаленно и локально все гуд. Пытаюсь вызвать с .Net клиента получаю, что на удаленном сервере класс не зарегистрирован. Собственно код вызова:
string server = "remotehost";
Type type = Type.GetTypeFromCLSID(typeof(ObjClass).GUID, server);
IObjClass link = (IObjClass)Activator.CreateInstance(type);
link.Run(tbxTest.Text);

Целый день пытался найти, что может быть не так ... Может кто наступал на такую граблю.
Re: DCOM вызов из net
От: Phaust  
Дата: 23.01.09 14:14
Оценка: -1
Здравствуйте, _Cancel, Вы писали:

_C>Проблема загадочного характера.

_C>COM сервер реализованный как DLL (С++) регистрируется на cервере. Для проверки пробую OleView->CreateInstance создаю его удаленно и локально все гуд. Пытаюсь вызвать с .Net клиента получаю, что на удаленном сервере класс не зарегистрирован. Собственно код вызова:
_C>
_C>string server = "remotehost";
_C>Type type = Type.GetTypeFromCLSID(typeof(ObjClass).GUID, server);
_C>IObjClass link = (IObjClass)Activator.CreateInstance(type);
_C>link.Run(tbxTest.Text);
_C>

_C>Целый день пытался найти, что может быть не так ... Может кто наступал на такую граблю.
По моему,так как вы делаете,нельзя. Что бы подключится к COM серверу следует знать его прокрамный идентификатор(вы его должны знать). Далее в таком вот духе:string ServName = ProgIDserver;

Type TypeOfServer = Type.GetTypeFromProgID(ProgIDserver);
if (TypeOfServer == null)
Marshal.ThrowExceptionForHR( HRESULTS.OPC_E_NOTFOUND );
object ServerObj = Activator.CreateInstance(TypeOfServer);
iServer = (IServer) OPCServerObj;
Re[2]: DCOM вызов из net
От: _Cancel Беларусь  
Дата: 23.01.09 15:07
Оценка:
Здравствуйте, Phaust, Вы писали:

P>По моему,так как вы делаете,нельзя. Что бы подключится к COM серверу следует знать его прокрамный идентификатор(вы его должны знать). Далее в таком вот духе:string ServName = ProgIDserver;


P>Type TypeOfServer = Type.GetTypeFromProgID(ProgIDserver);
P>if (TypeOfServer == null)
P>Marshal.ThrowExceptionForHR( HRESULTS.OPC_E_NOTFOUND );
P>object ServerObj = Activator.CreateInstance(TypeOfServer);
P>iServer = (IServer) OPCServerObj;
P>

а разницы по CLSID или по ProgID определять тип объекта. Естественно пробовал не работает. Я так понимаю, что удаленный COM-сервер, в DLL может быть реализован только для COM+, а так только EXE, ему ведь нужен процесс, чтоб кудато эту библиотеку загрузить. В COM+ это dllhost.exe.
Re[2]: DCOM вызов из net
От: _Cancel Беларусь  
Дата: 23.01.09 15:09
Оценка:
Здравствуйте, Phaust, Вы писали:

P>По моему,так как вы делаете,нельзя. Что бы подключится к COM серверу следует знать его прокрамный идентификатор(вы его должны знать). Далее в таком вот духе:string ServName = ProgIDserver;


P>Type TypeOfServer = Type.GetTypeFromProgID(ProgIDserver);
P>if (TypeOfServer == null)
P>Marshal.ThrowExceptionForHR( HRESULTS.OPC_E_NOTFOUND );
P>object ServerObj = Activator.CreateInstance(TypeOfServer);
P>iServer = (IServer) OPCServerObj;
P>


В догонку Type он кстати получает...
Re[3]: DCOM вызов из net
От: Phaust  
Дата: 23.01.09 15:27
Оценка: 1 (1)
Здравствуйте, _Cancel, Вы писали:
_C>Я так понимаю, что удаленный COM-сервер, в DLL может быть реализован только для COM+, а так только EXE, ему ведь нужен процесс, чтоб кудато эту библиотеку загрузить.
вы путаете теплое с мягким. Удаленный COM сервер в виде DLL это на самом DCOM inproc server. Можете почитать хоть здесь: http://www.allinterview.com/showanswers/16127.html http://www.osp.ru/win2000/2001/03/174740/
Re[4]: DCOM вызов из net
От: _Cancel Беларусь  
Дата: 28.01.09 08:32
Оценка:
Здравствуйте, Phaust, Вы писали:

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

_C>>Я так понимаю, что удаленный COM-сервер, в DLL может быть реализован только для COM+, а так только EXE, ему ведь нужен процесс, чтоб кудато эту библиотеку загрузить.
P>вы путаете теплое с мягким. Удаленный COM сервер в виде DLL это на самом DCOM inproc server. Можете почитать хоть здесь: http://www.allinterview.com/showanswers/16127.html http://www.osp.ru/win2000/2001/03/174740/

Спасибо, честно говоря не знал. Тогда совсем не могу понять, почему получаю ошибку класс не зарегистрирован...
Re: DCOM вызов из net
От: Tom Россия http://www.RSDN.ru
Дата: 28.01.09 09:28
Оценка:
_C>Целый день пытался найти, что может быть не так ... Может кто наступал на такую граблю.

Какое конкретно исключение и какой в нём HRESULT?
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.