zoukankan      html  css  js  c++  java
  • remoting中的序列化问题

    现在做一个remoting的小东西,我的项目构成是这样的,如图:

    在AttendanceManage类库中Attendance.cs是数据访问类。Base类库主要是写一个抽象父类,并由Attendance继承。AttendanceInfo.cs是实体类。下面的控制台应用程序相当于服务器端。

    首先,在AttendanceInfo.cs代码如下:

    Code

    AttendanceBase.cs代码如下:

    Code

    Attendance.cs代码如下:(类库已经正确引用)

    Code

    SqlHelper.cs就不用看了。

    控制台应用程序中,App.config

    Code

    Program.cs代码如下:

    Code

    在这里,服务器端代码完毕。

    来看客户端:

    客户端很简单,使用控制台应用程序,先将Base.dll添加应用,配置下APP.CONFIG:

    Code

    在客户端的program.cs中代码如下:

    Code

    此时,问题来了,最先,我在服务器端的App.config文件中并没有写:

    Code

    这时,报出一个安全什么的错误来,我查了查,貌似是需要填写上面的代码即可,我也写了,也过去了。

    ————————————————分割线,总结——————————————

    我这样写的目的是,分离出一个抽象类来,使用实体类继承抽象类,当客户端引用DLL时,只是引用抽象类的DLL,根本拿不到实体类的DLL。其实重要的的配置文件的配置和这句:

    Code

    要确定确实调用的是服务器端方法。而不是本地引用的DLL中的方法。

    ————————分割线,提出问题————————

    结果一运行又出了一个问题,那就是当我实例化实体类对象,并往对象属性中传值后,希望将此对象传递给服务器端方法进行相应操作,结果出了这样的错误:

    说实话,我很惊讶,并不太清楚怎么回事。个人感觉,可能是由于在客户端传递对象时,没有进行序列化的原因。

    既然需要进行序列化,那么就序列化吧,打算将对象序列化成XML格式,就是这几句

    Code

    成是成了,但是我如何传递呢?那不是需要将XML格式的字符串传递到服务器端,在进行反序列化么?

    但是这样就失去了我的本意了啊,我是打算将实体类型的对象传递过去到服务器端的,按照较为传统的方式传递。

    就是InsertAttendance()方法中的参数还是AttendanceInfo格式的。

    ————————解决方案——————————

    回复中5楼朋友【@yuguohua】 解答:

    因為 AttendanceInfo : MarshalByRefObject
    所以bai 的instance是建立在client, 當bai傳至server時, 只有reference.要讀取bai的內容時, 須再與client溝通, 而client並沒有提供溝通channel.

    請把 MarshalByRefObject 拿掉就可以解決問題.

    ————————————————
    6楼朋友【@一叶一菩提,一花一世界 】解答:

    很简单,我跟你调了一下结果把一个dll的名字写错了,搞了我个把小时,nnd,真郁闷啊,看来晚上不适宜看程序。

    你所有的server端的类都即继承自MarshalByRefObject 又把它mark成Serializable,这里太乱,你说它在rpc的时候到底是By Value还是By Reference呢? 这个就不得而知了,我也不知道,如果这样的romting的框架会怎么样去选择,如果它也不知道哦怎么选择,那它不就要出错了么?哈哈

    你可以把AttendanceInfo这个类就Mark成Serializable,然后把AttendanceBase继承与自MarshalByRefObject,Attendance继承自AttendanceBase(去掉Serializable)就好了。

    哈哈,你要用remoting,就要明明白白的告诉Remoting Framework你到底想干什么?By Value or By

    ————————————————————

    上面两位的解决方案是正确的,在此感谢2位。

  • 相关阅读:
    redis系列(五):搭建redis-cluster集群
    redis系列(四):切换RDB备份到AOF备份
    python写一个随机点名软件
    java使用flink集成mybatis每五分钟实时计算小时内用户行为数据
    本地缓存google.guava及分布式缓存redis 随笔
    spring boot+spring security 使用随笔
    MVEL2.0的使用实例(一)
    springboot2.x优雅的整合mybatis
    Springboot全套技术培训和常用框架整合
    私有云篇-[1相关技术]
  • 原文地址:https://www.cnblogs.com/fengyishou/p/1421658.html
Copyright © 2011-2022 走看看