Объект .net COM+, который возвращает IDataReader

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

Я немного взломал свой код и понял, что он будет работать, если я создам собственную реализацию IDataReader, которая будет сериализуема (имеет атрибут Serializable). Если реализация происходит от MarshalByRefObject, она завершается ошибкой.

Итак, можно ли вернуть стандартные объекты .net по ссылке из COM+ ServicedComponents, и если да, то что мне нужно сделать для этого?


person Kepboy    schedule 23.09.2008    source источник


Ответы (1)


Когда ваш клиент COM+ и компонент COM+ управляются, CLR пытается быть «умной» и пытается переключиться на использование удаленного взаимодействия .Net в качестве канала связи.

Чтобы этот сценарий работал, вы можете зарегистрировать канал удаленного взаимодействия для вашего объекта, который реализует IDataReader.

К сожалению, у меня нет доступа к коду, в котором я делал это пару лет назад, поэтому я не могу опубликовать образец. :-(

person Franci Penov    schedule 25.09.2008