【Remoting架構】
【1】是.NetFramework的一個重要組成
【2】框架的兩個重要特性
【A】基本實現【B】可擴展/可定制
【各個組成部分】
【1】【客戶端,客戶端應用程序域】
【組成】
【A】代理【Proxy】
【B】格式器【Formatter】
【C】通道【Channel】
【要點】
1.總是通過代理【Proxy】和服務端對象進行交互的
2.【Proxy】知道遠程對象的確切位置
【代理與遠程對象】
【A】Client向Proxy請求屬性或者方法,Proxy將請求發送給服務端對象==>【典型的代理模式】
【B】代理與遠程對象的綁定關系
【Proxy】
【兩個部分】
【透明代理,Transparent Proxy】
提供和服務對象一致的接口,將【棧幀,Stack Frame】轉換為【消息,Message】
【真實代理,Real Proxy】
負責使用【格式化器,Formatter】將消息序列化,終端客戶端程序[block],強序列化之後的消息發送到【通道,Channel中】
【消息,Message】
【客戶端發送請求的過程】
【obj】-->【透明代理】-->【真實代理】-->【格式化器】-->【通道】---->【到達服務端】
【2】【服務端,宿主應用程序域】
【組成】
【A】通道【Channel】
【B】格式化器【Formatter】
【C】棧生成器【Stack Builder】
【注意】
【A】宿主程序保持對Remoting所打開的端口監聽
【服務端處理過程】
保持監聽-->【Channel接受到Message】-->【Formatter,反序列化】-->【Stack Builder,創建或獲取對象,並調用對象方法,得到方法返回,並封裝為消息】-->【Formatter,序列化】-->
【發送給Channel】----->【返回給客戶端】
*【Remoting對象【傳引用封送】的三種激活方式】
【共同點】
【服務對象創建且一直保持在宿主程序域中】
【A】客戶端激活【Client activated】
==>創立專屬的遠程對象為其服務,對象的狀態一直維持著
==>缺點:
(1)增大服務端壓力;(2)浪費服務端系統資源[服務端一直維持對象狀態]
【B.1】服務端激活Singleton【Server activated Singleton】
==>所有客戶端共享同一個對象,後記的訪問不能夠重新創建對象,服務類型必須要求提供無參的構造函數
==>考慮線程同步
【B.2】服務端激活SingleCall【Server activated SingleCall】
==>為每一個請求創建一個對象,二在每次方法返回支護銷毀對象。
==>不會過久的占用資源
==>不保存對象狀態
==>需要求開發者自己寫程序邏輯維持狀體
==>服務類型必須要求提供無參的構造函數
【服務端激活】==>【Well-KnowOject,WKO】