C# 反序列化失败,是在activex控件中进行的,网上搜索无解,症状奇特,求关注,求诊断
主要想实现的功能是浏览器与其他窗体的通讯。
用c#做了一个activex。
activex的工作流程如下:
流程一:
从网页中获取数据封装成对象--->序列化--->由socket发送--->B端的socket收到-->反序列化-->处理
流程二:
B端处理完后-->数据封装成对象-->由B端socket发送-->activex端的socket收到--->activex端反序列化失败(错误信息:找不到程序集...)
流程一全部成功。成功将网页里文本框的内容发送给B端的窗体,并显示出来
流程二进行到activex端反序列化的时候失败了。还导致IE停止工作
流程一完成了一遍 对数据对象的 序列化和反序列化
这里是不是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
而且两端添加引用的是同一个dll。
流程二的时候失败,这是哪里出问题了?
流程一最后面的处理就是把收到字符串显示到文本框里而已。然后把数据对象送回activex端。
------解决方案--------------------找不到程序集,是因为你的Active装载到本地的iE时,只下载了Active.DLL文件,而ActiveDLL引用的 序列化与反序列化的DLL没有下载到本地来,所以提示找不到。建议ACTIVE引用的那个DLL的原码直接放到ACTIVE.DLL项目下一起编译。或把Active与你引用的DLL打包成安装项目,让IE自动安装
------解决方案--------------------可能是文件路径问题,
比如你注册的ActiveX控件在 "C:\MyActiveX\"
而IE加载后当前路径应该是 "C:\Programe ..."之类的一个路径
引用DLL是程序会检索当前路径,IE下的路径,和.net的安装路径。明显这两个路径都没有你的DLL。
解决方法如下:
将DLL Copy 到 IE 或者 .net 的关联路径。
或者用反射+ Application的路径(就是你的DLL所在路径)