Компонент COM +, размещенный службой Windows в C # для управления внешним устройством - PullRequest
2 голосов
/ 14 августа 2010

У меня есть служба Windows, написанная на C #, которая управляет устройством, подключенным к компьютеру через RS232 (собирает данные и позволяет управлять устройством).Он называется DeviceService и работает правильно.Теперь другие приложения используют его службами WCF.

Но теперь мне нужно представить некоторые функции в качестве компонента COM +, чтобы приложения на C ++ могли взаимодействовать с этой службой Windows (и получать от нее данные в реальном времени).

(я знаю, что, возможно, есть лучшие способы сделать это, но это требование, которое нельзя изменить. Это должно быть через COM +).

Проблема заключается в следующем: когда я создаю такойкомпонент в DeviceService и активировать его на клиенте он не видит данных.Например: статические переменные в службе Windows (DeviceService) возвращают значение NULL для компонента, определенного в той же сборке.Как будто это был другой экземпляр / контекст.

Как правильно разместить компонент COM + внутри службы Windows?Таким образом, они имеют один и тот же контекст (статические переменные).

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Правильный способ сделать это - поместить компонент COM + в службы компонентов и пометить его как многопоточный. Все экземпляры будут иметь одинаковые статические переменные.

1 голос
/ 14 августа 2010

Быстрый просмотр содержимого ". NET и COM: Полное руководство по взаимодействию" (основанного на .NET 1, но взаимодействие COM практически не изменилось) через SafariЭлектронные книги ничего не раскрывают.

Поэтому я хотел бы рассмотреть возможность создания служебной части с помощью WCF, а затем создать клиентскую библиотеку, которая предоставляет интерфейс COM локально.(Таким образом, замена внутрипроцессного COM-прокси DCOM и COM + на COM -> .NET CCR, а затем выполнение всего остального в чистом .NET.)

Конечно, COM-интерфейс клиентской библиотеки можно зарегистрировать в компоненте.сервисы, которые следует рассматривать как COM + (но если предоставляемой вами функциональности не требуется какой-либо сервис COM +, это не дает большого успеха).

...