none
Remoting保存DataTable出错,提示“调用的目标发生了异常” RRS feed

  • 问题

  • 如题,Remoting方式,获取远程对象,读取表正常,但是修改了表后,调用远程对象的Save表方法却提示:

    此问题早先提问过,标题为“Remoting回传强类型DataSet出错,提示“调用的目标发生了异常”,由于当时是运行以前编写好的程序出错,后来想了想,不就是.net framework我改用了4.0了吗,当时又改回3.5,结果不出错了。

    而现在,.net framework都到4.72了,总不能一直用3.5吧,而且现今的程序里有些还依赖高版本的.net framework,所以不能改回3.5测试。而且我想此问题的原因该不会是.net framework框架的问题所致,正常了也是巧合。

    后来又拿出早期的程序调试,看到当时程序集都设置编译为x86,即使是高版本的.net framework也运行正常,而改为Any cpu,则又会出错,反复修改生成平台以及.net框架,有时能改的运行正常了,但还是找不出其究竟为何?只感觉此原因与编译有关,却无法正确解决。

    请高手指点,谢谢!


    陈锦巍



    2019年6月26日 1:39

全部回复

  • 经过反复测试,发现影响该问题的一个因素就是中间的强类型DataSet程序集,也就是这个类似实体类Model的我当作通用类命名为"CommonComponet",由于客户端及中间层都需要,我把它单独弄成为一个程序集了。后来发现配置管理器里并不是所有程序集生成都被勾选,然而当我将"CommonComponet"生成给勾选了,则又会提示请求失败了。于是我想,也并非编译平台问题。于是又使用了老办法,将CommonComponet程序集目标框架改为.net 3.5,一切正常了,就算编译平台选为Any Cpu,也一样运行正常。

    这“百试百灵”的方法是解决了问题,可是,到底是什么原因呢?难道使用Remoting时,强类型DataSet程序集目标框架必须在.net 3.5及以下吗?哪里有有关的内容说明呢?反复试了,改为.net 4.0及以上任何框架,都会有上面的运行时错误。


    陈锦巍


    2019年6月26日 9:08
  • .Net 3.5以下,只要程序集版本不同,一样会出问题,因为序列化之后的信息,除了类型名字之外,还包含程序集名字、程序集版本(!)和签名。

    可以用SerializationBinder来更改序列化的时候使用的类型,但是这个一个是写起来麻烦,另一个是DataSet本来就是个很复杂的类,用起来慢。就算只为了性能起见,也建议自己写数据传输对象。



    Visual C++ MVP

    2019年6月27日 1:02
    版主
  • 嗯嗯,好的,谢谢!

    陈锦巍

    2019年6月27日 11:10
  • 嗯嗯,好的,谢谢!

    陈锦巍

    Hi,

    如果你的问题已经解决,请将正确答案mark。

    Best Regards,

    Alex


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年7月1日 6:01
    版主