Как вызвать объект DCOM из C #? - PullRequest
2 голосов
/ 05 ноября 2010

У меня есть CLSID, и мне нужно создать его на другом сервере (например, DCS), где моя рабочая машина (например, MWS).

Теперь, если я использую следующее:

var type = Type.GetTypeFromCLSID(new Guid(CLSID),
       Environment.MachineName, true);
 var COMObject = Activator.CreateInstance(type);
 var returnValue = COMObject.GetType().InvokeMember(methodName,
                        flags, null, COMObject, args, argModifiers, null, null);

Затем я получаю сообщение об ошибке «COM target не реализует IDispatch».Хорошо, я понимаю, что, возможно, целевой объект COM не имеет IDispatch, поэтому он терпит неудачу.

Теперь попробуйте что-то еще: если я добавлю ссылку на эту COM DLL в VS, то VS сгенерирует сборки взаимодействия, и тогда все будет работать как обычное создание объекта .net, но в этом случае объект фактически генерируетна моей локальной машине (MWS pc), а не на сервер, что я хочу.

Ребята, есть какие-либо предложения, как я могу справиться с этой ситуацией?

Заранее спасибо.

1 Ответ

3 голосов
/ 05 ноября 2010

Вы можете экспортировать ваш COM + с целевого компьютера в качестве прокси и установить его на свой компьютер, на котором запущено приложение.

Перейдите в консоль Component Service на целевой машине, щелкните правой кнопкой мыши ваше приложение COM + и выберите Экспорт... Затем выберите переключатель прокси приложения.Это позволит экспортировать прокси в это приложение COM + в виде файла MSI.Вам нужно установить его на свой компьютер вместо реального приложения COM + (это означает, что его нужно удалить, если он там установлен), а затем попробовать взаимодействие.

...