.NET IE BHO Remoting - PullRequest
       17

.NET IE BHO Remoting

1 голос
/ 18 ноября 2009

У меня есть объект IE Browser Helper, который является надстройкой панели инструментов для IE 8. У меня есть другое приложение .NET .EXE (Remoting Client), которое подключается к этому BHO (Remoting Server) с помощью удаленного взаимодействия через общий интерфейс. Когда я проверяю связь между приложением .EXE и приложением TEMP Console с тем же кодом, который используется в компоненте Server, он нормально общается и запускает удаленный метод.

Однако, когда я пытаюсь связаться с сервером BHO с безопасностью на TCP-канале, ON ChannelServices.RegisterChannel (tcpClientChannel, true); , Я получаю «FileNotFoundException» Не удалось загрузить файл или сборку «xxxx», где «xxxx» является общей сборкой интерфейса, которая содержит методы сервера.

Когда я пытаюсь связаться с сервером BHO с безопасностью на TCP-канале, OFF ChannelServices.RegisterChannel (tcpClientChannel, false); , Я получаю ошибку "соединение с удаленным объектом было принудительно закрыто".

Если я повторно протестирую его с помощью простого приложения консоли тестирования, оно будет работать.

Я начинаю верить, что проблема в том, как удаленное взаимодействие работает внутри экземпляра BHO ... Кто-нибудь использовал Remoting в экземпляре BHO .NET, я использую библиотеку SPICIE для создания BHO с использованием .NET.

ОБЩИЙ Интерфейс в сборе для удаленного интерфейса объекта пространство имен WWie.CommonClasses { Класс WWieRemote: MarshalByRefObject, WWieClassLibrary.WWieCommonClass.IGetHtmlElement { публичная строка GetElementClicked () { return («Вернул из WWieRemote»); }

    public void SetElementClicked(string str)
    {
        MessageBox.Show("SetElement " + str);
    }

}

}

Приложение для клиентов статический TcpChannel tcpClientChannel = new TcpChannel (); public static WWieClassLibrary.WWieCommonClass.IGetHtmlElement remoteObject; ChannelServices.RegisterChannel (tcpClientChannel, false); remoteObject = (WWieClassLibrary.WWieCommonClass.IGetHtmlElement) Activator.GetObject (typeof (WWieClassLibrary.WWieCommonClass.IGetHtmlElement), "tcp: // localhost: 9002 / TestWWie");

тестирование с удаленным вызовом метода

    remoteObject.SetElementClicked("from Client");   

SERVER BHO TcpChannel tcpServerChannel = новый TcpChannel (9002); ChannelServices.RegisterChannel (tcpServerChannel, true); RemotingConfiguration.RegisterWellKnownServiceType (typeof (WWieClassLibrary.WWieCommonClass.IGetHtmlElement), "TestWWie", WellKnownObjectMode.Singleton);

1 Ответ

1 голос
/ 18 ноября 2009

Поскольку IE по умолчанию работает в защищенном режиме, он обычно не имеет доступа для связи с процессами с более высокой степенью целостности. Если ваш URL-адрес находится в зоне интрасети, вы можете выдвинуть политику, отключающую защищенный режим для зоны интрасети. В противном случае вам может потребоваться поиск других параметров, таких как общая память, именованный канал, скрытые рабочие окна и зарегистрированные сообщения, а также настраиваемый фильтр сообщений для UIPI в Vista и т. Д.

...