У меня есть объект 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);