Сервер и клиент DCOM написаны на .NET - PullRequest
2 голосов
/ 22 февраля 2011

Я разрабатываю сервер DCOM в .NET 4 (VS2010, C #).Само по себе это работает нормально.

Теперь мне также нужно разработать клиент .NET для этого сервера DCOM, но я не могу добавить ссылку на TypeLib.Visual Studio сообщит мне, что библиотека типов была экспортирована из сборки .NET и не может быть добавлена ​​в качестве ссылки.

Ответы на этот вопрос предполагает, что я должен иметь возможность использовать TlbImp.exeсоздать сборку оболочки, но она также откажется это сделать:

TlbImp: ошибка TI1029: библиотека типов «MyWrapper» была экспортирована из сборки CLR и не может быть повторно импортирована как CLRсборка.

Я понимаю, что с точки зрения чисто .NET использование DCOM для этого может не иметь большого смысла.Однако тот же сервер также должен быть доступен из приложений, отличных от .NET.

Я попытался преобразовать свой tlb в IDL и восстановить его из этого, но это не обманывает Visual Studio.

Возможно, можно немного изменить IDL перед регенерацией, или есть какой-то способ принудительного использования DCOM, даже если сервер и клиент написаны на .NET?

1 Ответ

2 голосов
/ 23 февраля 2011

Мне удалось заставить работать DCOM, но я не уверен, что это можно сделать из TypeLib. Модификация IDL позволила мне импортировать библиотеку типов, но в конечном итоге это не удалось во время компиляции (хотя Visual Studio рассматривает это как предупреждение). Возможно, все еще возможно внести еще больше изменений в файл, но я использую гораздо более простое решение.

Все определения интерфейса для сервера DCOM были перемещены в отдельную сборку, на которую затем ссылается непосредственно клиент .NET. Это обходит проблему импорта.

Тогда доступ к серверу DCOM ничем не отличается от ожидаемого:

Guid clsId = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
Type type = Type.GetTypeFromCLSID(clsId);
IMyInterface comObject = (IMyInterface)Activator.CreateInstance(type);

Перемещение интерфейсов в отдельную сборку не является строго необходимым, но это сводит к минимуму размер общей сборки.

...