程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .Net Remoting【1】,.netremoting

.Net Remoting【1】,.netremoting

編輯:C#入門知識

.Net Remoting【1】,.netremoting


【.NetRemoting】2015.09.16
【分布式應用程序】
應用程序分布在不同計算機上,通過網絡來共同完成一項任務
C/S架構[模式]
【互操作性,Interoperability】又稱【互用性】
是指不同的計算機系統、網絡、操作系統和應用程序一起工作並共享信息的能力。

【.Net網絡編程技術】
WCF,Web Service,Remoting,Socket

【應用程序域,AppDomian,Application Domain】
1.【緣由】
【1】.Net程序集需要運行在托管環境中
【2】操作系統並不了解托管代碼
【3】需要有一個中介,既能為程序集提供托管環境,又能運行在非托管的操作系統的進程之內==>AppDomian;
【4】所有.Net程序集都運行在AppDomain
2.
【應用程序域是運行為它加載的程序集訪問.Net CLR提供的服務的】
【.Net提供的運行時服務】
托管堆,GC,JIT編譯器,程序集加載器等

3.
【1】可以將AppDomian類比為一個輕量級的進程,
【2】一個線程可以有多個AppDomian
【3】【默認的應用程序域】+【其他的應用程序域】
【4】應用程序域提供與進程類似的隔離性

4.創建AppDomian的優勢
【進程創建一個AppDomian比操作系統創建一個進程的開銷要小】

5.應用程序域的基本操作
【1】獲取當前運行代碼/程序集所在的AppDomian
AppDomian.CurrentDomain;
Thread.GetDomain();
【2】獲取應用程序域的名稱
FriendlyName
【3】創建新的應用程序域
AppDomian.CreareDomain("AppDomianName");
【4】在應用程序域中創建對象
【A】使用CreateInstanceAndUnWrap()方法;
【B】使用CreateInstance()方法創建對象

【5】判斷是否是默認AppDomian
IsDefaultAppDomain();


【默認的程序域】
【1】線程創建時即被創建
【2】無法卸載,與所在的進程同生同滅

【在默認程序域中創建對象】

【在新建的應用程序域中創建對象】
對象從另外一個AppDomian中傳遞給本地AppDomian
需要對傳遞的對象進行序列化

【思考】
如何使用應用程序域動態的加載一個程序集

【代理,Proxy】
【1】在應用程序域中創建對象和使用構造函數創建對象的區別?
【構造函數】
在堆中直接創建一個對象,由變量名直接引用到對象
【在應用程序域中創建對象】
【1】在應用程序域中創建對象
【2】將對象序列化後封送【Marshaling】到本地/客戶端應用程序域==>【遠程對象】
【3】客戶端應用程序域重新創建對象,還原對象狀態,==>創建對象代理【Proxy】,【代理對象】
【4】客戶端通過代理對象訪問遠程對象

【Proxy】提供了和遠程對象完全相同的接口。
客戶端基於遠程對象的類型元數據來創建代理,因此客戶端必須包含遠程對象的類型元數據
【元數據】
類型得接口,包含名稱,簽名,不包括實現代碼

【代理對象】newAppDomain中創建的對象
【遠程對象】客戶端應用程序域中創建的對象

【封送,Marshal】==>2中方式,傳值,傳引用
【傳值封送,Marshal By Value】將對象傳遞到客戶端
【傳引用封送,Marshal By reference】將對象依舊留在遠程AppDomian中,創建代理,通過代理訪問遠程對象
【傳引用封送的方式】【有三種方式】
【1】客戶端激活【Client activated】==>客戶端激活對象,CAO,Client activated Object
【2】服務端激活Singleton【Service activated Singleton】
【3】服務端激活SingleCall【Service activated SingleCall】

【傳引用封送】==>MBR對象
【MarshalByRefObject對象】
需要封送的對象必須要繼承MBR類
【當一個對象繼承自MBR之後,標志著該對象永遠無法離開他所在的應用程序域】

【傳引用封送和傳值封送的優勢】
對象大時候,傳值封送的效率要低,傳值封送需要將對象序列化,將整個對象封送到客戶端,增加了網絡負擔。。。

【Remoting】
跨應用程序域的訪問都屬於Remoting。
【無論AppDomian是在同一個進程內,還是同一個主機不同進程內的AppDomian,還是不同計算機的進程】
【客戶端】
發出請求的一端
【服務端】
提供類型的一端

【一個典型的Remoting程序】
【1】【服務程序集,提供服務的類型】
==>這些類型通常繼承自MBR,[傳引用封送的優勢]
【2】【服務端應用程序】==>【宿主應用程序域】
==>提供服務程序集運行的環境【IIS,Windows服務,控制台程序,winform窗體程序等等】
【3】【客戶端應用程序域】
==>向宿主應用程序域發出請求的應用程序域

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved