客户端为winform,服务端为remoting host in iis
客户端设计了一个插件功能,需要用反射动态加载程序集,该程序集中的一个类需要序列化到服务器端再执行某个方法。
由于该类为动态加载的类,服务端所引用的程序集中找不到此类,所以在反序列化时就会抛出“无法找到程序集”的异常。
请问针对这种情况有什么办法解决呢?
客户端设计了一个插件功能,需要用反射动态加载程序集,该程序集中的一个类需要序列化到服务器端再执行某个方法。
由于该类为动态加载的类,服务端所引用的程序集中找不到此类,所以在反序列化时就会抛出“无法找到程序集”的异常。
请问针对这种情况有什么办法解决呢?
解决方案 »
- c#中,为何可以将main()函数放在一个类中呢?这是c++中是不允许的呀?为何c#中却可以呢?
- 一段小程序
- C#或JAVA中有没有这样的功能
- 写代码还是直接用VS2005的功能阿?
- 懂日语的朋友请进
- C#做的网吧管理系统,怎么实现服务器端和客户端的连接,就是客户端能够连接服务器端的数据库?
- Vista下使用VS2008编译.EXE的C#程序 出现错误"无法加载 DLL“api_clnt.dll”: 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志。 (异常来自 HRESULT:0x800736B1)"。
- 如何在虚拟目录下创建可以设置大小的文件夹???
- 安装visual studio 2005 时候出现问题 ,请求援助
- 自制控件的问题
- C# 需要一个签章的功能,那位帮帮忙。。谢谢
- C#调用C++ OCX的方法
public void DeSerialize( byte [] data, int offset)
{
IFormatter formatter = new BinaryFormatter();
formatter.Binder = new UBinder();
MemoryStream stream = new MemoryStream(data, offset, stringlength);
this .m_bodyobject = ( object )formatter.Deserialize(stream);
}
public class UBinder:SerializationBinder
{
public override Type BindToType( string assemblyName, string typeName)
{
Assembly ass = Assembly.GetExecutingAssembly();
return ass.GetType(typeName);
}
}
2.序列化不是用代码实现的,是给类加上了序列化特性,由.net自动完成的序列化及反序列化,所以这个方法也不可取
另外当我把反射加载的程序集放到bin文件夹下的时候即使没有引用的程序集也可以反序列化成功(以前客户端的程度集有一部份没放到bin文件夹下为了更新程序集保持路径一致服务器端也放到bin文件夹外)
——任何对象在反序列化时,就已经 将 对象类型保存了起来;你之所以无法反序列化,值是因为你的代码执行到 反序列化时,你所需要的程序集没有被加载而已!!我会在每一个 Program 中加上这样几行代码:Assembly.Load(插件1的命名空间);
Assembly.Load(插件2的命名空间);
Assembly.Load(插件3的命名空间);
——在最开始的时候,就将 需要的插件 加载到程序域中!!!而不是,之后需要时,就加载插件程序集;
都是序列化保存和反序列化加载——没有任何问题!!!到目前为止,我还没有遇到 反序列化的问题!!!