今天就先談談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
: />
From:http://tw.wingwit.com/Article/program/ASP/201311/21646.html