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