Я создал класс .net, производный от ServicedComponent, и зарегистрировал его в COM+. Интерфейс, который реализует этот компонент, имеет метод, возвращающий IDataReader. Когда я вызываю обслуживаемый компонент из своего клиентского приложения, все работает. Я могу вызвать метод, который возвращает IDataReader, без проблем, но как только я вызываю метод для объекта, я получаю исключение: "System.Runtime.Remoting.RemotingException: это удаленное взаимодействие у прокси нет приемника каналов, что означает, что либо у сервера нет зарегистрированных серверных каналов, которые прослушиваются, либо у этого приложения нет подходящего клиентского канала для связи с сервером».
Я немного взломал свой код и понял, что он будет работать, если я создам собственную реализацию IDataReader, которая будет сериализуема (имеет атрибут Serializable). Если реализация происходит от MarshalByRefObject, она завершается ошибкой.
Итак, можно ли вернуть стандартные объекты .net по ссылке из COM+ ServicedComponents, и если да, то что мне нужно сделать для этого?