今天就先谈谈Remoting序列化的问题首先Remoting序列化是为了方便网络传输把远程对象转化为网络可传输的形式Remoting序列化可以实现多种形式序列化为xml序列化为二进制等等当然使用序列化需要添加一个标记【Serializable】而且可以用SerializableAttribute或是实现ISerializable接口下面放个序列化的代码Demo: : [Serializable] : public class SumOf : { : public SumOf() : { : } : : public DecimalList Members = new DecimalList() : : public decimal SumAvg; : : public void Calculate() : { : thisSum = ; : foreach (decimal m in Members) : { : Sum += m; : } : thisAvg = Sum / MembersCount; : : } : : } : [Serializable] : public class DecimalList : List<decimal> : { : } 接下来来说说租约的问题租约包含三个方面对象的生命周期什么是租约续约 对象的生命周期 我们先来认识一下什么是对象对象就是内存里的数据结构先说客户机检测服务器是否可用那我们就要验证远程对象是否还存在这个很简单我们只要调用远程对象如果远程对象不可用会出现异常那说明服务器不可用接着说服务器检测客户机是否可用使用垃圾回收机制验证只对Singleton对象和客户端激活对象有效 什么是租约 租约是在服务器记录的一个时间如果超过这个时间对象会被回收 续约为了让对象继续存在就必须使用续约 ()隐式续约每次调用远程对象上的方法的时候自动进行 ()显示续约使用ILeaseRenew()方法实现 ()发起租约租约管理者自动续约ILeaseRegister() 租约的配置InitialLeaseTime 租约时间默认值 RenewOnCallTime检查时间 默认值 SponsorshipTimeout过期时间 默认值LeaseManagerPollTime租约管理者临行时间 默认值 如何显示租约信息 : ILease lease = (ILease)objGetLifetimeService() : : if (lease != null) : { : ConsoleWriteLine(Lease Configuration:) : ConsoleWriteLine(InitialLeaseTime: + : leaseInitialLeaseTime) : ConsoleWriteLine(RenewOnCallTime: + : leaseRenewOnCallTime) : ConsoleWriteLine(SponsorshipTimeout: + : leaseSponsorshipTimeout) : ConsoleWriteLine(leaseCurrentLeaseTime) : } 如何配置租约信息 代码方式 : public override Object InitializeLifetimeService() : { : : ILease lease = (ILease)baseInitializeLifetimeService() : // Normally the initial lease time would be much longer : // It is shortened here for demonstration purposes : if (leaseCurrentState == LeaseStateInitial) : { : leaseInitialLeaseTime = TimeSpanFromSeconds() : leaseSponsorshipTimeout = TimeSpanFromSeconds() : leaseRenewOnCallTime = TimeSpanFromSeconds() : } : return lease; : } 配置文件方式 : <lifetime : leaseTime=M : sponsorshipTimeout=M : renewOnCallTime=M : /> |