我有一个 IE 浏览器帮助程序对象,它是 IE 8 的工具栏插件。我有另一个 .NET .EXE 应用程序(远程处理客户端),它通过通用接口使用远程处理连接到这个 BHO(远程处理服务器)。当我使用服务器组件中使用的相同代码测试 .EXE 应用程序和 TEMP 控制台应用程序之间的通信时,它可以正常通信,并运行远程方法。
但是,当我尝试在 TCP cahannel ON ChannelServices.RegisterChannel(tcpClientChannel, true) 上使用安全性与 BHO 服务器通信时;,我得到一个“FileNotFoundException”无法加载文件或程序集“xxxx”,其中“xxxx”是包含服务器方法的通用接口程序集。
当我尝试通过 TCP 通道上的安全性与 BHO 服务器通信时,关闭 ChannelServices.RegisterChannel(tcpClientChannel, false); ,我收到错误“与远程对象的连接被强制关闭”。
如果我使用简单的测试控制台应用程序重新测试它,它就可以工作。
我开始相信问题在于远程处理在 BHO 实例中的工作方式......有没有人在 BHO .NET 实例中使用过远程处理,我使用 SPICIE 库使用 .NET 创建 BHO。
远程接口对象命名空间 WWie.CommonClasses { class WWieRemote : MarshalByRefObject, WWieClassLibrary.WWieCommonClass.IGetHtmlElement { public string GetElementClicked() { return ("Returned from WWieRemote"); }
public void SetElementClicked(string str)
{
MessageBox.Show("SetElement " + str);
}
}
}
CLIENT APP 静态 TcpChannel tcpClientChannel = new TcpChannel(); 公共静态 WWieClassLibrary.WWieCommonClass.IGetHtmlElement 远程对象;ChannelServices.RegisterChannel(tcpClientChannel, false); remoteObject = (WWieClassLibrary.WWieCommonClass.IGetHtmlElement)Activator.GetObject(typeof(WWieClassLibrary.WWieCommonClass.IGetHtmlElement), "tcp://localhost:9002/TestWWie");
使用远程方法调用进行测试
remoteObject.SetElementClicked("from Client");
服务器 BHO TcpChannel tcpServerChannel = new TcpChannel(9002); ChannelServices.RegisterChannel(tcpServerChannel, true); RemotingConfiguration.RegisterWellKnownServiceType(typeof(WWieClassLibrary.WWieCommonClass.IGetHtmlElement), "TestWWie", WellKnownObjectMode.Singleton);