一旦建立好使用期,使用期上唯一可變更的屬性是 ILease.CurrentLeaseTime。有兩種方式可更新使用期:用戶端可直接呼叫 ILease.Renew,或是聯絡支援者並要求更新使用期。
用戶端可取得使用期並直接擴充,如以下程式碼範例所示。
Dim obj As New RemoteType()
Dim lease As ILease = CType(RemotingServices.GetLifetimeService(obj), ILease)
Dim expireTime As TimeSpan = lease.Renew(TimeSpan.FromSeconds(20))
[C#]
RemoteType obj = new RemoteType();
ILease lease = (ILease)RemotingServices.GetLifetimeService(obj);
TimeSpan expireTime = lease.Renew(TimeSpan.FromSeconds(20));
支援者
支援者聆聽來自主應用程式定義域、有關支援者是否希望延長特定物件存留使用期的查詢。支援者藉由取得使用期的參考,接著呼叫 ILease.Register,以實作 ISponsor 並利用使用期管理員註冊。一般來說,由於每個遠端物件都有許多用戶端,因此,讓遠端物件向其中一個用戶端要求更新使用期,比擁有所有抓取遠端物件的用戶端,要有效率得多。
**注意 **從 .NET Framework 1.1 版開始,註冊參與伺服器物件存留期的支援者,需要在伺服器應用程式定義域和支援者兩部份都設定 Full 自動還原序列化。如需詳細資訊,請參閱 .NET 遠端處理中的自動還原序列化。
使用支援者也可在許多用戶端之間提供動態更新原則。這是有效率的平行問題解決方式,因為一或多個用戶端可將要解決的問題提供給多個遠端物件。當遠端物件傳回方案後,就會告知支援者並允許其他所有遠端物件的使用期到期。
這個方法在移轉遠端物件時也很有用,因為其中的遠端物件可以從它目前的位置聯絡用戶端,而不需要用戶端花時間尋找它。
同時也請注意,如果支援者位在很大的網路上或甚至位於有很多防火牆的 Internet 上,便可能很難連絡。解決這個問題的方法是準備備份支援者,或將支援者放在接近主應用程式定義域的位置,也就是較有把握能夠聯絡到支援者的地方。
主應用程式定義域的使用期管理員負責維護支援者清單。當需要支援者更新使用期時間時,會詢問清單最上方的支援者是否要更新時間。如果在 ILease.SponsorshipTimeout 時間範圍內支援者沒有回應,便會將該支援者從清單中移除,並呼叫清單中下一個支援者。
使用支援者更新使用期
支援者參與存留使用期的方法為:取得特定物件參考的使用期、將它們自己註冊為支援者並等待遠端使用期管理員呼叫 ISponsor.Renewal。藉由呼叫 RemotingServices.GetLifetimeService 取得物件使用期,接著將需要使用期的物件以參數傳遞。這種呼叫屬於 RemotingServices 類別的靜態方法。如果物件對應用程式定義域而言為本機物件,這個呼叫的參數對物件來說是本機參考,且傳回的使用期是使用期的本機參考。如果物件位於遠端,則會將 Proxy 以參數傳遞。請注意,使用期本身是 Marshal-By-Reference (MBR) 物件,所以當您取得遠端物件的使用期時,也是取得使用期的 Proxy。因此,當您呼叫使用期上的方法時,也等於是正在對伺服器處理序發出遠端呼叫。
接著,藉由呼叫 ILease.Register 和傳遞支援者和選擇性 (Optional) TimeSpan 物件 (如果物件是剛建立),以遠端使用期管理員註冊支援者。
當這個物件的使用期到期時,使用期管理員可能會回呼至遠端支援者。支援者針對 ISponsor.Renewal 實作傳回的傳回值,將成為新的使用期時間。
請參閱
<lifetime> 項目 | 遠端設定結構描述 | 遠端處理範例:存留期 | 存留使用期 | 初始化使用期