主要想实现的功能是浏览器与其他窗体的通讯。用c#做了一个activex。activex的工作流程如下:流程一:
从网页中获取数据封装成对象--->序列化--->由socket发送--->B端的socket收到-->反序列化-->处理流程二:
B端处理完后-->数据封装成对象-->由B端socket发送-->activex端的socket收到--->activex端反序列化失败(错误信息:找不到程序集...)
流程一全部成功。成功将网页里文本框的内容发送给B端的窗体,并显示出来流程二进行到activex端反序列化的时候失败了。还导致IE停止工作
流程一完成了一遍 对数据对象的 序列化和反序列化
这里是不是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
而且两端添加引用的是同一个dll。流程二的时候失败,这是哪里出问题了?流程一最后面的处理就是把收到字符串显示到文本框里而已。然后把数据对象送回activex端。

解决方案 »

  1.   

    你引用了也没用,activex可不能获取服务器端的程序集
      

  2.   

    我说的两端添加引用的是同一个dl的意思是这样的:
    封装数据的那个类的程序集(C#.NET 的一个类库项目)是另外写的。生成了DLL文件(后面称为C.DLL)。activex端(C#.NET 的一个控件类库项目)添加引用了C.DLL。生成的时候会自动把C.DLL文件复制一份到本项目的输出目录下的。
    (activex是在JSP页面使用的)。 
    B端(C#.NET 的一个窗体项目)同样添加了引用了C.DLL文件。
    而且是在同一台电脑上测试的。
    activex端是在浏览器上的。  B端是一个窗体。
     可以把浏览器获得的数据发送到窗体上显示。(这一流程是成功实现了)。但是获取窗体数据发送回来的时候在activex端反序列化那一步出错了,说是找不到程序集。
      

  3.   

    找不到哪一个程序集?另外给你一个忠告,轻量级的通讯使用json,不要使用xml。因为json没有命名空间等复杂和易错的问题,而且也快很多倍。
      

  4.   

    json我不懂。 不过我不是用XML的。 因为没有跨语言。 两端都是C#做的。 所以直接把对象序列化为二进制流进行传输的。我觉得奇怪的是。流程一里 完成了一遍 对数据对象的 序列化和反序列化。
    这里应该是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
    才能在B端成功反序列化的。为什么反向的时候就不行了。
      

  5.   

    是否浏览器没有正确加载ActiveX控件?控件中出现未处理的异常导致IE崩溃
      

  6.   

    找不到程序集,是因为你的Active装载到本地的iE时,只下载了Active.DLL文件,而ActiveDLL引用的 序列化与反序列化的DLL没有下载到本地来,所以提示找不到。建议ACTIVE引用的那个DLL的原码直接放到ACTIVE.DLL项目下一起编译。或把Active与你引用的DLL打包成安装项目,让IE自动安装
      

  7.   

    可能是文件路径问题,
    比如你注册的ActiveX控件在 "C:\MyActiveX\"
    而IE加载后当前路径应该是 "C:\Programe ..."之类的一个路径引用DLL是程序会检索当前路径,IE下的路径,和.net的安装路径。明显这两个路径都没有你的DLL。解决方法如下:
    将DLL Copy 到 IE 或者 .net 的关联路径。
    或者用反射+ Application的路径(就是你的DLL所在路径)
      

  8.   

    问题已经解决了。9楼的回答最接近。 
    我把需要序列化和反序列的DLL文件 放在IE的bin目录下就行了。可能IE加载完Activex后,Activex就成为IE程序的一部分了。
    而反序列化的时候默认就是使用主程序的bin目录
      

  9.   

    更好的解决办法见:http://blog.csdn.net/lishiming0308/article/details/11483365