Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> .Net Remoting + COM клиент, Ошибка работы с удален 
:(
    Опции темы
DIR3ct0r
Дата 2.6.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



Есть тестовое клиент-серверное приложение на .Net с использованием Remoting. В сервере ничего заковыристого, просто класс с реализацией интерфейса, объявленного в отдельной сборке как
Код

    [ComVisible(true)]
    [Guid("3E30C861-5CE3-49b2-9633-88EFD16259E6")]
    public interface ISrv
    {
        void GetAppName([Out, MarshalAs(UnmanagedType.LPWStr)]out string _Result);
    }

Клиентская библиотека на .Net предоставляет доступ к удаленному интерфейсу для .Net клиента, а также COM-клиентам через свой клиентский интерфейс ICOMProxy:
Код

    [ComVisible(true)]
    [Guid("72E58B9C-19BC-48fd-AD2B-144A0C4F6ADE")]
    public interface ICOMProxy
    {
        ISrv GetServer();
        string GetServerMethod();
    }
 
    [ComVisible(true)]
    public class TComProxy : ICOMProxy
    {
        ISrv FSrv;
        public ISrv GetServer()
        {
            return FSrv;
        }
        public string GetServerMethod()
        {
            string Result;
            FSrv.GetAppName(out Result);
            return Result;
        }
        public TComProxy()
        {
 
            // экземпляр клиентского TCP-канала
            TcpClientChannel aTCPch = new TcpClientChannel();
            // регистрируется в ремотинг системе
            ChannelServices.RegisterChannel(aTCPch, false);
            // создание сервака
            FSrv = (ISrv)Activator.GetObject(typeof(ISrv), "tcp://localhost:8005/TestSrv");
        }
    }

Так вот, работа с ICOMProxy через .Net клиентами нареканий не вызывает, а вот при взаимодейстии через COM начинаются проблемы.
 Вот код Delphi 5:
Код

procedure TForm1.btn2Click(Sender: TObject);
var
  IProxy: ICOMProxy;
  IServer: ISrv;
begin
  IProxy := CreateComObject(CLASS_TComProxy) as ICOMProxy;
  ShowMessage(IProxy.GetServerMethod);
  IServer := IProxy.GetServer;
  ...
end;

Так вот, ShowMessage(IProxy.GetServerMethod) отрабатывает без проблем, что говорит о нормальном взаимодействии вызываемого клиента .Net с сервером. 
 А вот строчка IProxy.GetServer вызывает исключение E_NOINTERFACE.

 Попробовал получать из COM ссылку на вложенный произвольный интерфейс локального .Net объекта клиентской библиотеки. Работает.
 Очевидно, делегат интерфейса сервера, представленный переменной FSrv, не предоставляет COM-вызову требуемого интерфейса. Как лечить?


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.