【.NetRemoting】2015.09.16
【分布式應(yīng)用程序】
應(yīng)用程序分布在不同計(jì)算機(jī)上,通過網(wǎng)絡(luò)來共同完成一項(xiàng)任務(wù)
C/S架構(gòu)[模式]
【互操作性,InterOperability】又稱【互用性】
是指不同的計(jì)算機(jī)系統(tǒng)、網(wǎng)絡(luò)、操作系統(tǒng)和應(yīng)用程序一起工作并共享信息的能力。
【.Net網(wǎng)絡(luò)編程技術(shù)】
WCF,Web Service,Remoting,Socket
【應(yīng)用程序域,AppDomian,application Domain】
1.【緣由】
【1】.Net程序集需要運(yùn)行在托管環(huán)境中
【2】操作系統(tǒng)并不了解托管代碼
【3】需要有一個中介,既能為程序集提供托管環(huán)境,又能運(yùn)行在非托管的操作系統(tǒng)的進(jìn)程之內(nèi)==>AppDomian;
【4】所有.Net程序集都運(yùn)行在AppDomain
2.
【應(yīng)用程序域是運(yùn)行為它加載的程序集訪問.Net CLR提供的服務(wù)的】
【.Net提供的運(yùn)行時服務(wù)】
托管堆,GC,JIT編譯器,程序集加載器等
3.
【1】可以將AppDomian類比為一個輕量級的進(jìn)程,
【2】一個線程可以有多個AppDomian
【3】【默認(rèn)的應(yīng)用程序域】+【其他的應(yīng)用程序域】
【4】應(yīng)用程序域提供與進(jìn)程類似的隔離性
4.創(chuàng)建AppDomian的優(yōu)勢
【進(jìn)程創(chuàng)建一個AppDomian比操作系統(tǒng)創(chuàng)建一個進(jìn)程的開銷要小】
5.應(yīng)用程序域的基本操作
【1】獲取當(dāng)前運(yùn)行代碼/程序集所在的AppDomian
AppDomian.CurrentDomain;
Thread.GetDomain();
【2】獲取應(yīng)用程序域的名稱
FriendlyName
【3】創(chuàng)建新的應(yīng)用程序域
AppDomian.CreareDomain("AppDomianName");
【4】在應(yīng)用程序域中創(chuàng)建對象
【A】使用CreateInstanceAndUnWrap()方法;
【B】使用CreateInstance()方法創(chuàng)建對象
【5】判斷是否是默認(rèn)AppDomian
IsDefaultAppDomain();
【默認(rèn)的程序域】
【1】線程創(chuàng)建時即被創(chuàng)建
【2】無法卸載,與所在的進(jìn)程同生同滅
【在默認(rèn)程序域中創(chuàng)建對象】
【在新建的應(yīng)用程序域中創(chuàng)建對象】
對象從另外一個AppDomian中傳遞給本地AppDomian
需要對傳遞的對象進(jìn)行序列化
【思考】
如何使用應(yīng)用程序域動態(tài)的加載一個程序集
【代理,PRoxy】
【1】在應(yīng)用程序域中創(chuàng)建對象和使用構(gòu)造函數(shù)創(chuàng)建對象的區(qū)別?
【構(gòu)造函數(shù)】
在堆中直接創(chuàng)建一個對象,由變量名直接引用到對象
【在應(yīng)用程序域中創(chuàng)建對象】
【1】在應(yīng)用程序域中創(chuàng)建對象
【2】將對象序列化后封送【Marshaling】到本地/客戶端應(yīng)用程序域==>【遠(yuǎn)程對象】
【3】客戶端應(yīng)用程序域重新創(chuàng)建對象,還原對象狀態(tài),==>創(chuàng)建對象代理【Proxy】,【代理對象】
【4】客戶端通過代理對象訪問遠(yuǎn)程對象
【Proxy】提供了和遠(yuǎn)程對象完全相同的接口。
客戶端基于遠(yuǎn)程對象的類型元數(shù)據(jù)來創(chuàng)建代理,因此客戶端必須包含遠(yuǎn)程對象的類型元數(shù)據(jù)
【元數(shù)據(jù)】
類型得接口,包含名稱,簽名,不包括實(shí)現(xiàn)代碼
【代理對象】newAppDomain中創(chuàng)建的對象
【遠(yuǎn)程對象】客戶端應(yīng)用程序域中創(chuàng)建的對象
【封送,Marshal】==>2中方式,傳值,傳引用
【傳值封送,Marshal By Value】將對象傳遞到客戶端
【傳引用封送,Marshal By reference】將對象依舊留在遠(yuǎn)程AppDomian中,創(chuàng)建代理,通過代理訪問遠(yuǎn)程對象
【傳引用封送的方式】【有三種方式】
【1】客戶端激活【Client activated】==>客戶端激活對象,CAO,Client activated Object
【2】服務(wù)端激活Singleton【Service activated Singleton】
【3】服務(wù)端激活SingleCall【Service activated SingleCall】
【傳引用封送】==>MBR對象
【MarshalByRefObject對象】
需要封送的對象必須要繼承MBR類
【當(dāng)一個對象繼承自MBR之后,標(biāo)志著該對象永遠(yuǎn)無法離開他所在的應(yīng)用程序域】
【傳引用封送和傳值封送的優(yōu)勢】
對象大時候,傳值封送的效率要低,傳值封送需要將對象序列化,將整個對象封送到客戶端,增加了網(wǎng)絡(luò)負(fù)擔(dān)。。。
【Remoting】
跨應(yīng)用程序域的訪問都屬于Remoting。
【無論AppDomian是在同一個進(jìn)程內(nèi),還是同一個主機(jī)不同進(jìn)程內(nèi)的AppDomian,還是不同計(jì)算機(jī)的進(jìn)程】
【客戶端】
發(fā)出請求的一端
【服務(wù)端】
提供類型的一端
【一個典型的Remoting程序】
【1】【服務(wù)程序集,提供服務(wù)的類型】
==>這些類型通常繼承自MBR,[傳引用封送的優(yōu)勢]
【2】【服務(wù)端應(yīng)用程序】==>【宿主應(yīng)用程序域】
==>提供服務(wù)程序集運(yùn)行的環(huán)境【IIS,Windows服務(wù),控制臺程序,winform窗體程序等等】
【3】【客戶端應(yīng)用程序域】
==>向宿主應(yīng)用程序域發(fā)出請求的應(yīng)用程序域
新聞熱點(diǎn)
疑難解答
圖片精選