原創|其它|編輯:郝浩|2009-07-08 09:31:18.000|閱讀 299 次
概述:當客戶端創建遠程RemotableClass的一個實例,.NET框架在客戶端應用程序域中產生一個代理。該代理看起來就像實際對象。代理收到調用后,通過通道連接到遠程的對象。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
三、配置方式 該方式的缺點是配置文件可以被修改和刪除。
TimeServer和TimeClient在其源代碼內部注冊通道和遠程化的類。這樣有個缺點,一旦任何一個注冊數據改變,你必須要修改源代碼,并重新編譯。
這就是為什么.NET框架支持另一種形式的注冊。聲明注冊是通過調用靜態
RemotingConfiguration.Configure方法來從Config文件中得到信息。
范例如下:
四、激活方式
.NET框架將可遠程化對象分為兩種:服務器激活對象和客戶端激活對象。服務器端激活對象是通過RemotingConfiguration’sRegisterWellKnownServiceType和
RegisterWellKnownClientType方法注冊的。上面的范例都是服務器端激活對象。客戶端激活對象是通過RegisterActivateServiceType和RegisterActivatedClientType注冊的。
服務器端激活對象被稱為服務器激活的,因為當客戶端使用new,只有一個代理被創建。實際對象知道通過代理來調用一個方法時才被創建(激活)。換句話說,不是客戶端決定什么時候去創建物理上的真正對象。客戶端激活對象在客戶端使用new時就在服務器上創建。這個是第一個差別。
第二個差別是客戶端激活對象可以使用非缺省構造函數(帶參數的構造函數)激活。服務器端機會對象不支持非缺省構造函數,因為使用new只是創建一個代理,并沒有創建對應的實際對象。客戶端激活對象可以通過new同時創建代理和對象。
第三個差別是客戶端和對象是如何聯系在一起的。當注冊服務器激活對象時,你可以指定激活模式來決定為每一個請求創建一個對象實例還是創建一個對象實例來服務所有的請求。這兩中激活模式是:
WellKnownObjectMode.SingleCall:為每個請求創建一個唯一的對象實例。
WellKonwnObjectMode.Singleton:創建一個對象實例來服務所有的請求
通常根據環境來選擇合適的激活模式。舉例來說,如果一個遠程化對象提供了一個”One-shot”服務,不需要在多次調用間保持狀態或者不需要在所有客戶端同享狀態,那么SingleCall是個正確的選擇。因為每一次的請求產生的是一個新的對象實例。如果想在客戶端之間傳遞數據,則要使用Singleton。
Singleton對象一個值得注意的地方是線程的同步問題。當兩個客戶端同時調用該對象的方法時,可能會出現錯誤,這時要使用.NET框架提供的同步機制。
客戶端激活對象提供第三種選擇。當使用客戶端激活對象時,該對象僅為此客戶端服務,可以在多次調用間保持狀態。
Single-call服務器激活對象,Singleton服務器激活對象和客戶端激活對象的提供了三種不同的激活模式。當不需要在所有客戶端共享狀態時,則使用Single-call。當要在所有客戶端共享狀態時則使用Singleton。當不需要所有的客戶端連接到同一個對象,只要保持該客戶端自己的狀態時,則使用客戶端激活對象。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:自互聯網